hds*_*man 5 filter spring-cloud-gateway
我正在使用 Spring Cloud Gateway 过滤器,并且想要按 过滤请求GatewayFilterFactory,但订单无法与@Order注释一起使用
我尝试交换过滤器的顺序,但不起作用。
@Slf4j
@Order(1)
@Component
public class AccessFilter implements GatewayFilterFactory<AccessFilter.Config> {
@Override
public GatewayFilter apply(AccessFilter.Config config) {
return (exchange, chain) -> {
log.info("in AccessFilter second");
// do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
@Order(-1)
@Slf4j
@Component
public class AddTraceIdGlobalFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("in globalfilter first");
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
我的 yaml 文件:
spring:
cloud:
gateway:
routes:
- id: user_1
uri: http://user:8080
predicates:
- Path=/v1/user/info
filters:
- AccessFilter
Run Code Online (Sandbox Code Playgroud)
我期望的输出:
in globalfilter first
in AccessFilter second
Run Code Online (Sandbox Code Playgroud)
但实际输出:
in AccessFilter second
in globalfilter first
Run Code Online (Sandbox Code Playgroud)
小智 8
GatewayFilterFactory 无法应用@Order或Ordered。你必须使用OrderedGatewayFilter.
@Component
public class AccessFilter implements GatewayFilterFactory<AccessFilter.Config> {
@Override
public GatewayFilter apply(AccessFilter.Config config) {
return new OrderedGatewayFilter((exchange, chain) -> {
log.info("in AccessFilter second");
// do something
}, 1)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7880 次 |
| 最近记录: |