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 {
//自定义参数
}
}