forked from gzzfw/backEnd/gz-dyh

wangwh
2024-08-24 f7b1b518525dd2254efea2931a3dc6b447080f89
dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java
@@ -69,56 +69,51 @@
     */
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        //开发环境不校验
        if (SpringContextUtil.checkDev()){
            return chain.filter(exchange);
        }else {
            String url = exchange.getRequest().getURI().getPath();
            //跳过不需要验证的路径
            List<String> skipAuthUrlList = Arrays.asList(skipAuthUrls);
            Boolean status = false;
            if (!CollectionUtils.isEmpty(skipAuthUrlList)) {
                for (String skipAuthUrl : skipAuthUrlList) {
                    if (url.indexOf(skipAuthUrl) != -1) {
                        status = true;
                        break;
                    }
        String url = exchange.getRequest().getURI().getPath();
        //跳过不需要验证的路径
        List<String> skipAuthUrlList = Arrays.asList(skipAuthUrls);
        Boolean status = false;
        if (!CollectionUtils.isEmpty(skipAuthUrlList)) {
            for (String skipAuthUrl : skipAuthUrlList) {
                if (url.indexOf(skipAuthUrl) != -1) {
                    status = true;
                    break;
                }
            }
            if (status) {
                return chain.filter(exchange);
        }
        if (status) {
            return chain.filter(exchange);
        } else {
            ReturnBO returnBO = new ReturnBO();
            //从请求头中取出token
            String token = exchange.getRequest().getHeaders().getFirst("Authorization");
            //未携带token或token在黑名单内
            if (StringUtils.isEmpty(token) || isBlackToken(token)) {
                ServerHttpResponse originalResponse = exchange.getResponse();
                originalResponse.setStatusCode(HttpStatus.OK);
                originalResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
                returnBO.setCode(401);
                returnBO.setMsg("您尚未登录,请登录后重试!");
                byte[] response = returnBO.toString().getBytes(StandardCharsets.UTF_8);
                DataBuffer buffer = originalResponse.bufferFactory().wrap(response);
                return originalResponse.writeWith(Flux.just(buffer));
            } else {
                ReturnBO returnBO = new ReturnBO();
                //从请求头中取出token
                String token = exchange.getRequest().getHeaders().getFirst("Authorization");
                //未携带token或token在黑名单内
                if (StringUtils.isEmpty(token) || isBlackToken(token)) {
                //取出token包含的身份
                returnBO = verifyJWT(token);
                if (returnBO.getCode() != 0) {
                    ServerHttpResponse originalResponse = exchange.getResponse();
                    originalResponse.setStatusCode(HttpStatus.OK);
                    originalResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
                    returnBO.setCode(401);
                    returnBO.setMsg("您尚未登录,请登录后重试!");
                    byte[] response = returnBO.toString().getBytes(StandardCharsets.UTF_8);
                    DataBuffer buffer = originalResponse.bufferFactory().wrap(response);
                    return originalResponse.writeWith(Flux.just(buffer));
                } else {
                    //取出token包含的身份
                    returnBO = verifyJWT(token);
                    if (returnBO.getCode() != 0) {
                        ServerHttpResponse originalResponse = exchange.getResponse();
                        originalResponse.setStatusCode(HttpStatus.OK);
                        originalResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
                        byte[] response = returnBO.toString().getBytes(StandardCharsets.UTF_8);
                        DataBuffer buffer = originalResponse.bufferFactory().wrap(response);
                        return originalResponse.writeWith(Flux.just(buffer));
                    } else {
                        //将现在的request,添加当前身份
                        String userId = (String) returnBO.getData();
                        ServerHttpRequest mutableReq = null;
                        exchange.getRequest().mutate().header("Authorization-userId", userId).build();
                        ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build();
                        return chain.filter(mutableExchange);
                    }
                    //将现在的request,添加当前身份
                    String userId = (String) returnBO.getData();
                    ServerHttpRequest mutableReq = null;
                    exchange.getRequest().mutate().header("Authorization-userId", userId).build();
                    ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build();
                    return chain.filter(mutableExchange);
                }
            }
        }