有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
定义全局过滤器需要实现 GlobalFilter,Ordered 接口:
1 2 3
| GlobalFilter:过滤器拦截处理方法
Ordered: 过滤器也有多个,这里主要定义过滤器执行顺序,里面有个方法 getOrder()会返回过滤器执行顺序,返回值越小,越靠前执行
|
需求:
我们创建全局过滤器并完成常见业务用户权限校验,如果请求中有带有一个名字为 token
的请求参数,则认为请求有效放行,如果没有则拦截提示授权无效。
创建全局过滤器:com.itheima.filter.RouterFilter
,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| @Component
public class RouterFilter implements GlobalFilter,Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("RouterFilter----------------");
String token = exchange.getRequest().getQueryParams().getFirst("token");
if(StringUtils.isEmpty(token)){
exchange.getResponse().setStatusCode(HttpStatus.PAYLOAD_TOO_LARGE);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}
|
此时请求,我们不携带 token 参数,效果如下:
我们携带 token 参数则可以正常访问,效果如下: