Spring Cloud自定义过滤器

1.自定义XXXGatewayFilterFactory继承AbstractGatewayFilterFactory
2.实现apply和shortcutxxx方法

@Component
public class TokenGatewayFilterFactory extends AbstractGatewayFilterFactory<TokenGatewayFilterFactory.Config> {

    private static final Logger log = LoggerFactory.getLogger(TokenGatewayFilterFactory.class);
    @Autowired
    private RedisTemplate redisTemplate;

    public TokenGatewayFilterFactory() {
        super(TokenGatewayFilterFactory.Config.class);
    }

    @Override
    public GatewayFilter apply(Config config) {
        return new GatewayFilter() {
            @Override
            public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
                List<String> list = exchange.getRequest().getQueryParams().get("token");
                log.info("list信息 {}", list);
                if (list == null) {
                    throw new IllegalTokenException("非法令牌");
                }
                String token = list.get(0);
                log.info("token信息 {}", token);
                if (!redisTemplate.hasKey(TOKEN_KEY + token)) {
                    throw new IllegalTokenException("不合法的令牌");
                }
                return chain.filter(exchange);
            }
        };
    }

    @Override
    public List<String> shortcutFieldOrder() {
        //接受自定义参数
        //return arrays.asList(xxxx);
        return super.shortcutFieldOrder();
    }

    public static class Config {
       //自定义参数
    }
}

posted @ 2021-10-08 23:36  code-G  阅读(243)  评论(0编辑  收藏  举报