From 7c3418c45926b5288b22044d60dbb12fa2c982d0 Mon Sep 17 00:00:00 2001
From: xusd <hugeinfo123>
Date: Fri, 27 Sep 2024 18:02:40 +0800
Subject: [PATCH] 大厅登记接口优化

---
 dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java |  134 ++++++++++++++++++--------------------------
 1 files changed, 56 insertions(+), 78 deletions(-)

diff --git a/dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java b/dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java
index f4829ee..5c299ad 100644
--- a/dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java
+++ b/dyh-gateway/src/main/java/cn/huge/gateway/filter/AuthFilter.java
@@ -1,5 +1,7 @@
 package cn.huge.gateway.filter;
 
+import cn.huge.gateway.utils.JsonMapper;
+import cn.huge.gateway.utils.ReturnBO;
 import cn.huge.gateway.utils.SpringContextUtil;
 import com.auth0.jwt.JWT;
 import com.auth0.jwt.JWTVerifier;
@@ -46,16 +48,14 @@
     @Value("${jwt.secret-key}")
     private String secretKey;
 
+    @Value("${jwt.iss-user}")
+    private String issUser;
+
     @Value("${jwt.auth-skip-urls}")
     private String[] skipAuthUrls;
 
     @Value("${jwt.blacklist-key.format}")
     private String jwtBlacklistKeyFormat;
-
-    /**
-     * jwt用户
-     */
-    private static String ISSUSER = "HUGEINFO";
 
     @Override
     public int getOrder() {
@@ -70,72 +70,52 @@
      */
     @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 {
+            JsonMapper jsonMapper = new JsonMapper();
+            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 = jsonMapper.toJson(returnBO).getBytes(StandardCharsets.UTF_8);
+                DataBuffer buffer = originalResponse.bufferFactory().wrap(response);
+                return originalResponse.writeWith(Flux.just(buffer));
             } else {
-                // todo 运营中心暂时写死token
-                if (url.indexOf("dyh-oper") != -1) {
-                    String userId = "10001";
+                //取出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 = jsonMapper.toJson(returnBO).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);
-                } else {
-                    //从请求头中取出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");
-                        byte[] response = "{\"code\": \"401\",\"msg\": \"用户未登录,请进行登录!\"}"
-                                .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) {
-                            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);
-                            DataBuffer buffer = originalResponse.bufferFactory().wrap(response);
-                            return originalResponse.writeWith(Flux.just(buffer));
-                        } else {
-                            //将现在的request,添加当前身份
-                            String userId = (String) result.get("userId");
-                            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();
-                            }
-                            ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build();
-                            return chain.filter(mutableExchange);
-                        }
-                    }
                 }
             }
         }
@@ -146,35 +126,33 @@
      * @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)
-                    .withIssuer(ISSUSER)
+                    .withIssuer(issUser)
                     .build();
             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;
     }
 
     /**

--
Gitblit v1.8.0