过滤
过滤类
//config/Test1Filter.java
@Component
public class Test1Filter implements GlobalFilter {
private static final Logger LOG = LoggerFactory.getLogger(Test1Filter.class);
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
LOG.info("test1filer");
return null;
}
}
测试效果
多个过滤器优先级
@Component
public class Test1Filter implements GlobalFilter, Ordered {
private static final Logger LOG = LoggerFactory.getLogger(Test1Filter.class);
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
LOG.info("test1filer");
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}
全局过滤
@Component
public class LoginMemberFilter implements GlobalFilter {
private static final Logger LOG = LoggerFactory.getLogger(LoginMemberFilter.class);
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String path = exchange.getRequest().getURI().getPath();
// 排除不需要拦截的请求
if (path.contains("/admin")
|| path.contains("/hello")) {
LOG.info("不需要登录验证:{}", path);
return chain.filter(exchange);
} else {
LOG.info("需要登录验证:{}", path);
}
// 获取header的token参数
String token = exchange.getRequest().getHeaders().getFirst("token");
LOG.info("会员登录验证开始,token:{}", token);
if (token == null || token.isEmpty()) {
LOG.info( "token为空,请求被拦截" );
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
}
测试效果
不需要验证的接口
需要验证的接口
无token
有token