Spring Cloud Gateway之全局过滤器在工作中的使用场景

一、使用注意事项

1、全局过滤器作用于所有的路由,不需要单独配置。

2、通过@Order来指定执行的顺序,数字越小,优先级越高。

二、默认全局拦截器的整体架构

三、实战场景,例如,校验token、记录请求参数(可参考这边https://www.cnblogs.com/hyf-huangyongfei/p/12849406.html)、替换负载均衡以后的路由等等。

1、校验token

@Slf4j
public class AuthenFilter implements GlobalFilter, Ordered {
 
    @Resource
    private IFeignClient feignClient;
 
    private static final String GATEWAY_ROUTE_BEAN = "org.springframework.cloud.gateway.support" +
            ".ServerWebExchangeUtils.gatewayRoute";
 
    private static final String BEAR_HEAD = "bear";
 
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        String requestUrl = request.getPath().pathWithinApplication().value();
        //判断过滤器是否执行
        if (!RequestUtils.isFilter(requestUrl)) {
            //该请求转发,因为访问/leap,需要展示登录页
            if (requestUrl.equals("/leap/") || requestUrl.equals("/leap")) {
                ServerHttpRequest authErrorReq = request.mutate()
                        .path("/index.html")
                        .build();
                ServerWebExchange indexExchange = exchange.mutate().request(authErrorReq).build();
                return chain.filter(indexExchange);
            }
            ResEntity res;
            ServerHttpResponse response = exchange.getResponse();
            Map<String, String> cookiesInfo = getCookiesInfo(request);
            String account = cookiesInfo.get("account");
            String token = cookiesInfo.get("token");
            //校验token
            res = feignClient.verifyToken(token);
            log.info("校验token:{}", res.getMsg());
            //如果token失效清除cookies ,让用户解锁或者重新登录
            if (200 == res.getHttpStatus()) {
                response.addCookie(ResponseCookie.from("token", token).path("/").build());
                response.addCookie(ResponseCookie.from("userAccount", account).path("/").build());
            } 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值