
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>2.4.4</version>
</dependency>

spring:
cloud:
gateway:
routes:
- id: route-a
uri: http://localhost:8081
predicates:
- Path=/service-a/**
- id: route-b
uri: http://localhost:8082
predicates:
- Path=/service-b/**


import java.util.UUID;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@Component
public class RequestIdFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
String requestId = request.getHeaders().getFirst("X-Request-Id");
if (requestId == null) {
requestId = UUID.randomUUID().toString();
}
ServerHttpRequest modifiedRequest = request.mutate().header("X-Request-Id", requestId).build();
ServerWebExchange modifiedExchange = exchange.mutate().request(modifiedRequest).build();
return chain.filter(modifiedExchange).then(Mono.fromRunnable(() -> {
exchange.getResponse().getHeaders().add("X-Request-Id", requestId);
}));
}
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
}

spring:
cloud:
gateway:
routes:
- id: route-a
uri: http://localhost:8081
predicates:
- Path=/service-a/**
filters:
- name: RequestIdFilter

spring:
cloud:
gateway:
globalcors:
corsConfigurations:
'[/**]':
allowedOrigins: "*"
allowedMethods: GET,POST,DELETE,PUT
globalfilters:
- name: RequestIdFilter
![]()

被折叠的 条评论
为什么被折叠?



