Skip to content

Commit 26095b1

Browse files
committed
feat: gateway 添加 filter 生成 traceId
1 parent bbb4337 commit 26095b1

3 files changed

Lines changed: 47 additions & 4 deletions

File tree

gateway/src/main/java/com/github/cadecode/uniboot/gateway/filter/RequestHeaderFilter.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
44
import org.springframework.cloud.gateway.filter.GlobalFilter;
5+
import org.springframework.core.annotation.Order;
56
import org.springframework.http.server.reactive.ServerHttpRequest;
67
import org.springframework.stereotype.Component;
78
import org.springframework.web.server.ServerWebExchange;
@@ -13,16 +14,21 @@
1314
* @author Cade Li
1415
* @since 2023/8/8
1516
*/
17+
@Order(1)
1618
@Component
1719
public class RequestHeaderFilter implements GlobalFilter {
1820

21+
public static final String HEAD_SOURCE = "from-source";
22+
23+
public static final String HEAD_USER_DETAILS = "inner-user-details";
24+
1925
@Override
2026
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
2127
// 去掉内部调用专用的请求头,防止伪造
2228
ServerHttpRequest request = exchange.getRequest().mutate()
2329
.headers(h -> {
24-
h.remove("from-source");
25-
h.remove("inner-user-details");
30+
h.remove(HEAD_SOURCE);
31+
h.remove(HEAD_USER_DETAILS);
2632
})
2733
.build();
2834
return chain.filter(exchange.mutate().request(request).build());
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.github.cadecode.uniboot.gateway.filter;
2+
3+
import cn.hutool.core.lang.UUID;
4+
import org.slf4j.MDC;
5+
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
6+
import org.springframework.cloud.gateway.filter.GlobalFilter;
7+
import org.springframework.core.annotation.Order;
8+
import org.springframework.http.server.reactive.ServerHttpRequest;
9+
import org.springframework.stereotype.Component;
10+
import org.springframework.web.server.ServerWebExchange;
11+
import reactor.core.publisher.Mono;
12+
13+
/**
14+
* 用于添加 trace id 的过滤器
15+
*
16+
* @author Cade Li
17+
* @since 2023/8/10
18+
*/
19+
@Order(0)
20+
@Component
21+
public class TraceInfoFilter implements GlobalFilter {
22+
23+
public static final String HEAD_TRACE_ID = "trace-id";
24+
25+
@Override
26+
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
27+
String traceId = UUID.fastUUID().toString(true);
28+
ServerHttpRequest request = exchange.getRequest().mutate()
29+
.headers(h -> {
30+
MDC.put(HEAD_TRACE_ID, traceId);
31+
h.set(HEAD_TRACE_ID, traceId);
32+
})
33+
.build();
34+
exchange.getResponse().getHeaders().set(HEAD_TRACE_ID, traceId);
35+
return chain.filter(exchange.mutate().request(request).build());
36+
}
37+
}

gateway/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)