栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringCloud在网关中定义过滤器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringCloud在网关中定义过滤器

@Component
public class AuthFilter implements GlobalFilter, Ordered {
    //配置不需校验的链接
    //在yml中配置
    //#自定义配置,定义不需要校验token的连接
    //gateway:
    //  excludedUrls: /user/login,/user/loginVerification,/system/users/verification,/system/users/login
    @Value("${gateway.excludeUrls}")
    private List excludeUrls;

    //过滤器核心业务代码
    @Override
    public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        for (String excludeUrl : excludeUrls) {
            System.out.println(excludeUrl);
        }

        //1.排除不需校验的链接
        String path = exchange.getRequest().getURI().getPath();//当前请求链接
        System.out.println("url:"+path);
        if(excludeUrls.contains(path)){
            return chain.filter(exchange);  //放行
        }
        //2.获取token并校验
        String token = exchange.getRequest().getHeaders().getFirst("Authorization");
        //token中可能还含有 "Bearer ",要去除
        if(!StringUtils.isEmpty(token)){
            token = token.replaceAll("Bearer ","");
        }
        boolean verifyToken = JwtUtils.verifyToken(token);
        //3.校验失败,响应错误状态码:401
        if(!verifyToken){
            Map responseData = new HashMap<>();
            responseData.put("errCode", 401);
            responseData.put("errMessage", "用户未登录");
            return responseError(exchange.getResponse(),responseData);//responseError对应下面的responseError方法
        }
        return chain.filter(exchange);
    }

    //响应错误数据
    private Mono responseError(ServerHttpResponse response, Map responseData){
        // 将信息转换为 JSON
        ObjectMapper objectMapper = new ObjectMapper();
        byte[] data = new byte[0];
        try {
            data = objectMapper.writevalueAsBytes(responseData);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        // 输出错误信息到页面
        DataBuffer buffer = response.bufferFactory().wrap(data);
        response.setStatusCode(HttpStatus.UNAUTHORIZED);
        response.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
        return response.writeWith(Mono.just(buffer));
    }

    //配置执行顺寻
    @Override
    public int getOrder() {

        return 0;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/643599.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号