在项目中,我们可能会遇到,多个模块,不能的模块资源权限校验方式可能不一样,这个时候我们可以使用Gateway的局部过滤器来进行处理
我们需要自定义一个AbstractGatewayFilterFactory,代码如下:
@Component public class AuthGatewayFilterFactory extends AbstractGatewayFilterFactory{ public AuthGatewayFilterFactory () { super(Config.class); } @Override public GatewayFilter apply(Config config) { return (exchange, chain) -> { ServerPath server = ServerPath.build(exchange); // url路径 String path = server.getPath(); ServerHttpRequest request = exchange.getRequest(); HttpHeaders header = request.getHeaders(); String token = header.getFirst(Constants.AUTHORIZATION); //todo 1:判断token是否有效,2:判断path是否在用户所在的资源中 return chain.filter(exchange); }; } public static class Config { //Put the configuration properties for your filter here } }
然后我们需要在Gateway的yml中配置要权限校验的服务的过滤器即可
spring:
cloud:
gateway:
routes:
- id: auth
uri: lb://auth
predicates:
- Path=/auth/**
filters:
- StripPrefix=1
# 过滤器的名称取得是AuthGatewayFilterFactory去掉GatewayFilterFactory的部分
- Auth
好了,到这里配置就基本结束了
最后,欢迎关注微信公众号一起交流



