gateway网关接口请求的校验

gateway网关token的校验

再加入gateway网关之后,我们在后台服务的许多校验操作都可以移动到gateway网关, 今天我就来说一下怎么校验请求携带的token。
首先我们需要编写一个局部过滤器,继承AbstractGatewayFilterFactory如下在这里插入图片描述

然后在apply方法中实现自己要校验的逻辑,所有的请求参数或者token都可以通过request获取。 验证失败我在catch捕捉异常, 然后将异常信息返回给前端请求,返回信息的异常处理是这样的

               e.printStackTrace();
                ServerHttpResponse response = exchange.getResponse();
                JSONObject message = new JSONObject();
                message.put("status", -1);
                message.put("data", e.getMessage());
                byte[] bits = message.toJSONString().getBytes(StandardCharsets.UTF_8);
                DataBuffer buffer = response.bufferFactory().wrap(bits);
                response.setStatusCode(HttpStatus.UNAUTHORIZED);
                //指定编码,否则在浏览器中会中文乱码
                response.getHeaders().add("Content-Type", "text/plain;charset=UTF-8");
                return response.writeWith(Mono.just(buffer));

状态码根据需求自己定义,异常信息就可以放回给前端请求。
至于校验通过,就直接放行即可

chain.filter(exchange);

如果还需要修改返回的路径请求可以这样

 // 修改路径
            String newPath ="/test/" + request.getPath();
            ServerHttpRequest newRequest = request.mutate()
                    .path(newPath)
                    .build();
            exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, newRequest.getURI());
            //放行
            return chain.filter(exchange.mutate()
                    .request(newRequest).build());

以上就是过滤器的编写, 然后就是路由的配置,我是在yml文件中配置

 routes:
        - id: token_routh
          uri: lb://test-service
          order: 0
          predicates:
            - Path=/test/**
          filters:
            # 去除/test
            - StripPrefix=1
            - TokenApi

filters下面的TokenApi对应的过滤器就是刚刚编写的过滤器,以上就完成了 对指定接口校验的功能。
希望能帮助大家

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值