瀏覽代碼

Merge remote-tracking branch 'origin/master'

wxd 3 周之前
父節點
當前提交
51f5eab10a
共有 1 個文件被更改,包括 39 次插入26 次删除
  1. 39 26
      alien-gateway/src/main/java/shop/alien/gateway/config/JwtTokenFilter.java

+ 39 - 26
alien-gateway/src/main/java/shop/alien/gateway/config/JwtTokenFilter.java

@@ -23,7 +23,9 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.server.ServerWebExchange;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
+import shop.alien.entity.store.LifeUser;
 import shop.alien.entity.store.StoreUser;
+import shop.alien.gateway.mapper.LifeUserMapper;
 import shop.alien.gateway.mapper.StoreUserMapper;
 import shop.alien.util.common.JwtUtil;
 
@@ -57,6 +59,9 @@ public class JwtTokenFilter implements GlobalFilter, Ordered {
     @Autowired
     private StoreUserMapper storeUserMapper;
 
+    @Autowired
+    private LifeUserMapper lifeUserMapper;
+
     /**
      * 过滤器
      *
@@ -67,12 +72,10 @@ public class JwtTokenFilter implements GlobalFilter, Ordered {
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
         String url = exchange.getRequest().getURI().getPath();
-        log.info("====================>path: " + url);
-
+        log.info("JwtTokenFilter.filter?Path={}", url);
         if (Objects.equals(exchange.getRequest().getMethod(), HttpMethod.OPTIONS)) {
             return allowChain(exchange, chain);
         }
-
         //跳过不需要验证的路径
         if (null != skipAuthUrls && Arrays.asList(skipAuthUrls).contains(url)) {
             return allowChain(exchange, chain);
@@ -80,17 +83,14 @@ public class JwtTokenFilter implements GlobalFilter, Ordered {
         if (url.startsWith("/alienStore/webjars") || url.startsWith("/alienSecond/webjars")) {
             return allowChain(exchange, chain);
         }
-
         //获取token
         String token = exchange.getRequest().getHeaders().getFirst("Authorization");
-        log.info("====================>token值: " + token);
-
+        log.info("JwtTokenFilter.filter?Token={}", token);
         JSONObject map = new JSONObject();
-        int errorType = 0;
         ServerHttpResponse resp = exchange.getResponse();
         if (StringUtils.isBlank(token)) {
             //没有token
-            log.error("没有token");
+            log.error("JwtTokenFilter.filter ERROR 没有Token");
             return authError(resp, "请登录");
         } else {
             //有token
@@ -111,18 +111,34 @@ public class JwtTokenFilter implements GlobalFilter, Ordered {
                 }
                 String redisVal = baseRedisService.getString(redisKey);
                 if (StringUtils.isEmpty(redisVal) || !token.equals(redisVal)) {
-                    //判断程序是否为用户禁用
-                    StoreUser storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getPhone, phone));
-                    if (storeUser.getStatus() == 1) {
-                        map.put("msg", "你的账号已被禁用");
-                        //别问, 问就是约定俗成
-                        map.put("code", 777);
-                    } else {
-                        map.put("msg", "用户在别处登录");
-                        //别问, 问就是约定俗成
-                        map.put("code", 666);
+                    if ("store".equals(deviceType)) {
+                        //判断程序是否为用户禁用
+                        StoreUser storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getPhone, phone));
+                        if (storeUser.getStatus() == 1) {
+                            map.put("msg", "你的账号已被禁用");
+                            //别问, 问就是约定俗成
+                            map.put("code", 777);
+                        }
+                        if (!redisVal.equals(token)) {
+                            map.put("msg", "账号在别处登录");
+                            //别问, 问就是约定俗成
+                            map.put("code", 666);
+                        }
+                    } else if ("user".equals(deviceType)) {
+                        //判断程序是否为用户禁用
+                        LifeUser lifeUser = lifeUserMapper.selectOne(new LambdaQueryWrapper<LifeUser>().eq(LifeUser::getUserPhone, phone));
+                        //注销标记, 0:未注销, 1:已注销
+                        if (null != lifeUser.getLogoutFlag() && lifeUser.getLogoutFlag() == 1) {
+                            map.put("msg", "你的账号已注销");
+                            //别问, 问就是约定俗成
+                            map.put("code", 777);
+                        }
+                        if (!redisVal.equals(token)) {
+                            map.put("msg", "账号在别处登录");
+                            //别问, 问就是约定俗成
+                            map.put("code", 666);
+                        }
                     }
-
                     map.put("success", false);
                     exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);
                     return exchange.getResponse()
@@ -133,14 +149,14 @@ public class JwtTokenFilter implements GlobalFilter, Ordered {
                 return allowChain(exchange, chain);
             } catch (ExpiredJwtException e) {
                 if (e.getMessage().contains("Allowed clock skew")) {
-                    log.error("认证过期", e);
+                    log.error("JwtTokenFilter.filter ERROR 认证过期");
                     return authError(resp, "认证过期");
                 } else {
-                    log.error("认证失败", e);
+                    log.error("JwtTokenFilter.filter ERROR 认证失败");
                     return authError(resp, "认证失败");
                 }
             } catch (Exception e) {
-                log.error("认证失败", e);
+                log.error("JwtTokenFilter.filter ERROR 认证失败");
                 return authError(resp, "认证失败");
             }
         }
@@ -153,8 +169,7 @@ public class JwtTokenFilter implements GlobalFilter, Ordered {
                     .filter(kv -> (kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)
                             || kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS)
                             || kv.getKey().equals(HttpHeaders.VARY)))
-                    .forEach(kv ->
-                    {
+                    .forEach(kv -> {
                         // Vary只需要去重即可
                         if (kv.getKey().equals(HttpHeaders.VARY))
                             kv.setValue(kv.getValue().stream().distinct().collect(Collectors.toList()));
@@ -186,9 +201,7 @@ public class JwtTokenFilter implements GlobalFilter, Ordered {
         json.put("code", HttpStatus.UNAUTHORIZED.value());
         json.put("msg", message);
         json.put("data", "");
-
         log.error("认证错误响应: {}", json.toJSONString());
-
         DataBuffer buffer = resp.bufferFactory().wrap(json.toString().getBytes(StandardCharsets.UTF_8));
         return resp.writeWith(Flux.just(buffer));
     }