第二天 g:
全局过滤器:
全局过滤器的作用就是处理一切进入网关的请求和微服务响应,与GatewaFilter的作用一样。
不过GatewayFilter是通过配置进行定义,处理逻辑是固定的,而GlobalFilter的逻辑则是需要自己写代码实现。
定义的方法就是实现GlobalFilter接口。
实战训练:
定义全局过滤器,实现拦截并判断用户身份:
1.参数中是否有authorization
2.判断authorization参数值是否为admin
如果同时满足则放行。
@Order(-1)
@Component
public interface authorFilter implement GlobalFilter{
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain){
//1.获取请求参数。
MultiValueMap<String,String> params = exchange.getRequest().getQueryParams();
//2.获得authorization参数
String auto = params.getFirst("authorization")
//3.进行校验
if(“admin".equals(auto)){
return chain.filter(exchange);
}
//4.拦截:
//严禁访问
exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
//4.2结束处理
return exchange.getResponse().setComplete();
}
}
其中@Order(-1)用来确定过滤器的使用先后。
当然也可以写成
@Component
public interface authorFilter implement GlobalFilter,Ordered{
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain){
//1.获取请求参数。
MultiValueMap<String,String> params = exchange.getRequest().getQueryParams();
//2.获得authorization参数
String auto = params.getFirst("authorization")
//3.进行校验
if(“admin".equals(auto)){
return chain.filter(exchange);
}
//4.拦截:
//严禁访问
exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
//4.2结束处理
return exchange.getResponse().setComplete();
}
@Override
public int getOrder(){
return -1;
}
}