forked from gzzfw/backEnd/gz-dyh

dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java
@@ -1,5 +1,6 @@
package cn.huge.gateway.filter;
import cn.huge.gateway.utils.ReturnBO;
import cn.huge.gateway.utils.SpringContextUtil;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
@@ -87,6 +88,7 @@
            if (status) {
                return chain.filter(exchange);
            } else {
                ReturnBO returnBO = new ReturnBO();
                //从请求头中取出token
                String token = exchange.getRequest().getHeaders().getFirst("Authorization");
                //未携带token或token在黑名单内
@@ -94,34 +96,26 @@
                    ServerHttpResponse originalResponse = exchange.getResponse();
                    originalResponse.setStatusCode(HttpStatus.OK);
                    originalResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
                    byte[] response = "{\"code\": \"401\",\"msg\": \"用户未登录,请进行登录!\"}"
                            .getBytes(StandardCharsets.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包含的身份
                    Map<String, Object> result = verifyJWT(token);
                    int code = (int) result.get("code");
                    if (code != 0) {
                    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");
                        String responseResult = "{\"code\": \"" + code + "\", \"msg\": \"" + result.get("msg") + "\"}";
                        byte[] response = responseResult.getBytes(StandardCharsets.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) result.get("userId");
                        String userId = (String) returnBO.getData();
                        ServerHttpRequest mutableReq = null;
                        String custId = (String) result.get("custId");
                        if (StringUtils.isNotEmpty(custId)) {
                            URI uri = exchange.getRequest().getURI();
                            URI newUri = assembleUri(uri, custId);
                            exchange.getRequest().mutate().uri(newUri).header("Authorization-userId", userId).header("Authorization-custId", custId).build();
                        } else {
                            exchange.getRequest().mutate().header("Authorization-userId", userId).build();
                        }
                        exchange.getRequest().mutate().header("Authorization-userId", userId).build();
                        ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build();
                        return chain.filter(mutableExchange);
                    }
@@ -135,8 +129,8 @@
     * @param token 授权信息
     * @return Map
     */
    private Map<String, Object> verifyJWT(String token){
        Map<String, Object> result = new HashMap<>();
    private ReturnBO verifyJWT(String token){
        ReturnBO returnBO = new ReturnBO();
        try {
            Algorithm algorithm = Algorithm.HMAC256(secretKey);
            JWTVerifier verifier = JWT.require(algorithm)
@@ -145,25 +139,23 @@
            DecodedJWT jwt = verifier.verify(token);
            String userId = jwt.getClaim("userId").asString();
            if (userId.isEmpty()){
                result.put("code", 401);
                result.put("msg", "登录用户已失效,请重新登录");
                returnBO.setCode(401);
                returnBO.setMsg("您尚未登录,请登录后重试!");
            }else{
                result.put("code", 0);
                result.put("userId", userId);
                String custId = jwt.getClaim("custId").asString();
                result.put("custId", custId);
                returnBO.setCode(0);
                returnBO.setData(userId);
            }
        } catch (JWTVerificationException e){
            log.error("AuthFilter方法[verifyJWT]调用异常:"+e, e);
            if (e.getMessage().indexOf("The Token has expired") != -1){
                result.put("code", 401);
                result.put("msg", "登录用户已失效,请重新登录!");
                returnBO.setCode(401);
                returnBO.setMsg("您尚未登录,请登录后重试!");
            }else{
                result.put("code", 401);
                result.put("msg", "登录用户已失效,请重新登录");
                returnBO.setCode(401);
                returnBO.setMsg("您尚未登录,请登录后重试!");
            }
        }
        return result;
        return returnBO;
    }
    /**