@Component
public class LoginGlobalFilter implements GlobalFilter,Ordered {
/***
* 全局拦截
* @param exchange
* @param chain
* @return
*/
@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
/***
* 拦截用户登录,用户登录了,才允许访问微服务,需要放行
* 用户没登录,不允许访问微服务,需要拦截
* 如果用户传入了token参数,则表示已登录
*/
ServerHttpRequest request = exchange.getRequest();
//1.获取token参数
//getQueryParams():查询所有请求的参数
//getFirst("token"):根据名字获取指定的参数
String token = request.getQueryParams().getFirst("token");
//2.判断是否登录
if(StringUtils.isEmpty(token)){//为空,没登录,要拦截 401 / 403
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
//放行
return chain.filter(exchange);
}
/***
* 全局过滤器的执行顺序,越大越先执行
* @return
*/
@Override
public int getOrder() {
return 1;
}
}