在com.xxxxa.gateway.filter包下创建
是在网关下面操作:
网关的包里创建:
定义方式是非常简单,只需实现GlobalFilter接口
——————————————————————————————————————————————
在filter中编写自定义逻辑,可以实现下列功能:
登录状态判断
权限校验
请求限流等
————————————————————————————————————————————
案例
需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:
参数中是否有authorization
authorization参数值是否为admin
如果同时满足则放行,否则拦截
@Component
public class AuthFilter implements GlobalFilter,Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 1.接收请求参数
MultiValueMap<String, String> param = exchange.getRequest().getQueryParams();
// 2.获取authorization参数
String auth = param.getFirst("authorization");
// 3.验证是否为admin用户
if (auth!=null && auth.equals("admin")) {
// 4.放行
return chain.filter(exchange);
}
// 5.拦截
// 5.1 禁止访问,设置401状态码
exchange.getResponse().setRawStatusCode(401);
// 5.2 处理完成
return exchange.getResponse().setComplete();
}
@Override
public int getOrder() {
return 1;
}
}
网关解决跨域问题.xml
spring:
cloud:
gateway:
# 。。。
globalcors: # 全局的跨域处理
add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
corsConfigurations:
'[/**]':
allowedOrigins: # 允许哪些网站的跨域请求
- "http://localhost:63342"
- "*"
allowedMethods: # 允许的跨域ajax的请求方式
- "GET"
- "POST"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders: "*" # 允许在请求中携带的头信息
allowCredentials: true # 是否允许携带cookie
maxAge: 360000 # 这次跨域检测的有效期