Skip to content

Commit ce5004d

Browse files
committed
feat: 配置 trace id 过滤器,配置 feign 传递 trace id
1 parent 26095b1 commit ce5004d

5 files changed

Lines changed: 50 additions & 5 deletions

File tree

example/example_svc/src/main/resources/logback-spring.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424

2525
<!--输出格式-->
2626
<property name="consolePattern"
27-
value="%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%-15thread]) %highlight(%-5level) %cyan(%-50logger{50}) : %msg%n"/>
27+
value="%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%-15thread]-%X{trace-id}) %highlight(%-5level) %cyan(%-50logger{50}) : %msg%n"/>
2828
<!--不带色彩的格式用以输出到文件-->
29-
<property name="filePattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-15thread] %-5level %-50logger{50} : %msg%n"/>
29+
<property name="filePattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-15thread]-%X{trace-id} %-5level %-50logger{50} : %msg%n"/>
3030

3131
<!--控制台输出日志-->
3232
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">

framework/framework_api/src/main/java/com/github/cadecode/uniboot/framework/api/config/FeignConfig.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,12 @@ protected void configRequestTemplate(RequestTemplate requestTemplate) {
5252
return;
5353
}
5454
// 配置客户端 IP
55-
requestTemplate.header("X-Forwarded-For", ServletUtil.getClientIP(servletRequest));
55+
requestTemplate.header(SecurityConst.HEAD_FORWARDED_FOR, ServletUtil.getClientIP(servletRequest));
56+
// 传递 trace id
57+
String traceId = ServletUtil.getHeader(servletRequest, SecurityConst.HEAD_TRACE_ID, CharsetUtil.CHARSET_UTF_8);
58+
if (ObjectUtil.isNotEmpty(traceId)) {
59+
requestTemplate.header(SecurityConst.HEAD_TRACE_ID, traceId);
60+
}
5661
// 传递用户 token
5762
String token = SecurityUtil.getTokenFromRequest(servletRequest);
5863
if (StrUtil.isNotEmpty(token)) {

framework/framework_api/src/main/java/com/github/cadecode/uniboot/framework/api/config/SecurityConfig.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33
import cn.hutool.core.collection.CollUtil;
44
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;
58
import com.github.cadecode.uniboot.framework.api.config.SecurityConfig.SecurityProperties;
9+
import com.github.cadecode.uniboot.framework.api.consts.SecurityConst;
610
import com.github.cadecode.uniboot.framework.api.enums.AuthModelEnum;
711
import com.github.cadecode.uniboot.framework.api.security.filter.TokenAuthFilter;
812
import com.github.cadecode.uniboot.framework.api.security.handler.NoAuthenticationHandler;
@@ -11,6 +15,7 @@
1115
import lombok.Data;
1216
import lombok.RequiredArgsConstructor;
1317
import lombok.extern.slf4j.Slf4j;
18+
import org.slf4j.MDC;
1419
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
1520
import org.springframework.boot.context.properties.ConfigurationProperties;
1621
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -26,7 +31,13 @@
2631
import org.springframework.security.config.http.SessionCreationPolicy;
2732
import org.springframework.security.web.access.expression.WebExpressionVoter;
2833
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
34+
import org.springframework.web.filter.OncePerRequestFilter;
2935

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;
3041
import java.util.Arrays;
3142
import java.util.List;
3243

@@ -89,6 +100,8 @@ protected void configure(HttpSecurity http) throws Exception {
89100
Arrays.asList(new WebExpressionVoter(), dataBaseRoleVoter)));
90101
// 配置 Token 校验过滤器
91102
http.addFilterBefore(tokenAuthFilter, UsernamePasswordAuthenticationFilter.class);
103+
// 配置 trace id 过滤器
104+
http.addFilterBefore(new TraceInfoFilter(), TokenAuthFilter.class);
92105
log.info("Config Security over,AuthModel:{}", properties.getAuthModel());
93106
}
94107

@@ -147,4 +160,21 @@ public static class TokenConfig {
147160
*/
148161
private String secret;
149162
}
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+
}
150180
}

framework/framework_api/src/main/java/com/github/cadecode/uniboot/framework/api/consts/SecurityConst.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,14 @@ public interface SecurityConst {
2828
*/
2929
String HEAD_USER_DETAILS = "inner-user-details";
3030

31+
/**
32+
* X-Forwarded-For
33+
*/
34+
String HEAD_FORWARDED_FOR = "X-Forwarded-For";
35+
36+
/**
37+
* trace id
38+
*/
39+
String HEAD_TRACE_ID = "trace-id";
40+
3141
}

framework/framework_svc/src/main/resources/logback-spring.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424

2525
<!--输出格式-->
2626
<property name="consolePattern"
27-
value="%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%-15thread]) %highlight(%-5level) %cyan(%-50logger{50}) : %msg%n"/>
27+
value="%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%-15thread]-%X{trace-id}) %highlight(%-5level) %cyan(%-50logger{50}) : %msg%n"/>
2828
<!--不带色彩的格式用以输出到文件-->
29-
<property name="filePattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-15thread] %-5level %-50logger{50} : %msg%n"/>
29+
<property name="filePattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-15thread]-%X{trace-id} %-5level %-50logger{50} : %msg%n"/>
3030

3131
<!--控制台输出日志-->
3232
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">

0 commit comments

Comments
 (0)