|
2 | 2 |
|
3 | 3 | import cn.hutool.core.collection.CollUtil; |
4 | 4 | import cn.hutool.core.util.ArrayUtil; |
| 5 | +import cn.hutool.core.util.CharsetUtil; |
| 6 | +import cn.hutool.core.util.ObjectUtil; |
| 7 | +import cn.hutool.extra.servlet.ServletUtil; |
5 | 8 | import com.github.cadecode.uniboot.framework.api.config.SecurityConfig.SecurityProperties; |
| 9 | +import com.github.cadecode.uniboot.framework.api.consts.SecurityConst; |
6 | 10 | import com.github.cadecode.uniboot.framework.api.enums.AuthModelEnum; |
7 | 11 | import com.github.cadecode.uniboot.framework.api.security.filter.TokenAuthFilter; |
8 | 12 | import com.github.cadecode.uniboot.framework.api.security.handler.NoAuthenticationHandler; |
|
11 | 15 | import lombok.Data; |
12 | 16 | import lombok.RequiredArgsConstructor; |
13 | 17 | import lombok.extern.slf4j.Slf4j; |
| 18 | +import org.slf4j.MDC; |
14 | 19 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; |
15 | 20 | import org.springframework.boot.context.properties.ConfigurationProperties; |
16 | 21 | import org.springframework.boot.context.properties.EnableConfigurationProperties; |
|
26 | 31 | import org.springframework.security.config.http.SessionCreationPolicy; |
27 | 32 | import org.springframework.security.web.access.expression.WebExpressionVoter; |
28 | 33 | import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; |
| 34 | +import org.springframework.web.filter.OncePerRequestFilter; |
29 | 35 |
|
| 36 | +import javax.servlet.FilterChain; |
| 37 | +import javax.servlet.ServletException; |
| 38 | +import javax.servlet.http.HttpServletRequest; |
| 39 | +import javax.servlet.http.HttpServletResponse; |
| 40 | +import java.io.IOException; |
30 | 41 | import java.util.Arrays; |
31 | 42 | import java.util.List; |
32 | 43 |
|
@@ -89,6 +100,8 @@ protected void configure(HttpSecurity http) throws Exception { |
89 | 100 | Arrays.asList(new WebExpressionVoter(), dataBaseRoleVoter))); |
90 | 101 | // 配置 Token 校验过滤器 |
91 | 102 | http.addFilterBefore(tokenAuthFilter, UsernamePasswordAuthenticationFilter.class); |
| 103 | + // 配置 trace id 过滤器 |
| 104 | + http.addFilterBefore(new TraceInfoFilter(), TokenAuthFilter.class); |
92 | 105 | log.info("Config Security over,AuthModel:{}", properties.getAuthModel()); |
93 | 106 | } |
94 | 107 |
|
@@ -147,4 +160,21 @@ public static class TokenConfig { |
147 | 160 | */ |
148 | 161 | private String secret; |
149 | 162 | } |
| 163 | + |
| 164 | + /** |
| 165 | + * Filter |
| 166 | + * trace id to MDC |
| 167 | + */ |
| 168 | + public static class TraceInfoFilter extends OncePerRequestFilter { |
| 169 | + @Override |
| 170 | + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain |
| 171 | + filterChain) |
| 172 | + throws ServletException, IOException { |
| 173 | + String traceId = ServletUtil.getHeader(request, SecurityConst.HEAD_TRACE_ID, CharsetUtil.CHARSET_UTF_8); |
| 174 | + if (ObjectUtil.isNotEmpty(traceId)) { |
| 175 | + MDC.put(SecurityConst.HEAD_TRACE_ID, traceId); |
| 176 | + } |
| 177 | + filterChain.doFilter(request, response); |
| 178 | + } |
| 179 | + } |
150 | 180 | } |
0 commit comments