目录
Gateway作为SpringCloud体系中的网关,可以用来进行鉴权,安全控制,日志统一处理,易于监控,限流等。
一、自定义断言工厂
Gateway官方给我们能提供了很多种断言的方式,比如说通过路径、请求方法、Cookie等等一系列的断言方式,我们可以参考一下官方的写法,然后就可以写出我们自己需要断言方式。
首先我们来到AbstractRoutePredicateFactory,这是断言父类接口的抽象实现类,因为我们需要自己定义断言的条件,所以在yml中解析到的参数会放到一个配置类当中,那这个构造方法其实就是将定义的配置类传到上面,这个抽象类的实现类其实就是各种断言工厂
首先我们定义一个类叫AccessTokenRoutePredicateFactory,因为遵循着约定大于配置的思想,所以我们在yml中配置的就会是 - AccessToken 开头的,并且我们需要继承AbstractRoutePredicateFactory并重写它的几个方法即可,下面是完整的代码
@Slf4j
@Component
public class AccessTokenRoutePredicateFactory extends AbstractRoutePredicateFactory<AccessTokenRoutePredicateFactory.Config> {
private static final String Name = "headerName";
private static final String Value = "value";
public AccessTokenRoutePredicateFactory() {
super(Config.class);
}
@Override
public Predicate<ServerWebExchange> apply(Config config) {
return new Predicate<ServerWebExchange>() {
@Override
public boolean test(ServerWebExchange exchange) {
HttpHeaders headers = exchange.getRequest().getHeaders();
List<String> list = headers.getOrDefault(config.headerName, Collections.emptyList());
if(list.size() != 1){
return false;
}
String value = list.get(0);
return value.equalsIgnoreCase(config.getValue());
}
};
}
@Override
public ShortcutType shortcutType() {
return Shortc