Browse Source

add no token throw service exception

Mr.qian 2 tuần trước cách đây
mục cha
commit
a6d68567a9
1 tập tin đã thay đổi với 33 bổ sung28 xóa
  1. 33 28
      mall-service/src/main/java/com/txz/mall/core/AuthService.java

+ 33 - 28
mall-service/src/main/java/com/txz/mall/core/AuthService.java

@@ -25,38 +25,42 @@ import java.util.UUID;
 @Service
 @Slf4j
 public class AuthService {
-
+    
     private static final String BEARER = "Bearer ";
-
+    
     /**
      * jwt token 密钥,主要用于token解析,签名验证
      */
     @Value("${spring.security.oauth2.jwt.signingKey}")
     private static String signingKey = "txz123456";
-
+    
     private static Claims getJwt(String jwtToken) {
-        if (jwtToken.startsWith(BEARER)) {
-            jwtToken = StringUtils.substring(jwtToken, BEARER.length());
-        }
-        Claims claims;
         try {
-            claims = Jwts.parser()
-                    .setSigningKey(signingKey.getBytes())
-                    .parseClaimsJws(jwtToken).getBody();
-        } catch (ExpiredJwtException e) {
-            claims = e.getClaims();
+            if (jwtToken.startsWith(BEARER)) {
+                jwtToken = StringUtils.substring(jwtToken, BEARER.length());
+            }
+            Claims claims;
+            try {
+                claims = Jwts.parser()
+                        .setSigningKey(signingKey.getBytes())
+                        .parseClaimsJws(jwtToken).getBody();
+            } catch (ExpiredJwtException e) {
+                claims = e.getClaims();
+            }
+            return claims;
+        } catch (Exception e) {
+            throw new ServiceException("请先登录");
         }
-
-        return claims;
+        
     }
-
+    
     public String buildJwtToken(Long userId) {
         String KEY = "txz123456";
         Date now = DateUtil.date();
         Date exp = DateUtil.offset(now, DateField.DAY_OF_YEAR, 30);
         Map<String, Object> claims = new HashMap<String, Object>();
         claims.put("userId", userId);
-
+        
         String jwtToken = Jwts.builder()
                 .setClaims(claims)
                 .setId(UUID.randomUUID().toString())
@@ -64,10 +68,10 @@ public class AuthService {
                 .setSubject("sawa")
                 .signWith(SignatureAlgorithm.HS256, KEY.getBytes())
                 .setExpiration(exp).compact();
-
+        
         return "Bearer " + jwtToken;
     }
-
+    
     public String buildJwtTokenWithRole(Long userId, Integer role, Integer day) {
         String KEY = "123456";
         Date now = DateUtil.date();
@@ -75,7 +79,7 @@ public class AuthService {
         Map<String, Object> claims = new HashMap<String, Object>();
         claims.put("userId", userId);
         claims.put("role", role);
-
+        
         String jwtToken = Jwts.builder()
                 .setClaims(claims)
                 .setId(UUID.randomUUID().toString())
@@ -83,10 +87,10 @@ public class AuthService {
                 .setSubject("sawa")
                 .signWith(SignatureAlgorithm.HS256, KEY.getBytes())
                 .setExpiration(exp).compact();
-
+        
         return "Bearer " + jwtToken;
     }
-
+    
     public Claims getClaimsFromToken(String authentication) {
         try {
             final Claims claims = this.getJwt(authentication);
@@ -99,7 +103,7 @@ public class AuthService {
         }
         return null;
     }
-
+    
     public static Long getTokenUserId(HttpServletRequest request) {
         if (request == null) {
             ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
@@ -113,11 +117,12 @@ public class AuthService {
         Claims claims = getJwt(token);
         return Long.valueOf(claims.get("userId").toString());
     }
-
+    
     /**
      * 验证 JWT token 的有效性
      *
      * @param token 待验证的 token 字符串(可带或不带 "Bearer " 前缀)
+     *
      * @return 验证结果对象,包含:
      * - 是否有效(boolean)
      * - 如果无效,错误信息(String)
@@ -129,20 +134,20 @@ public class AuthService {
             if (StringUtils.isBlank(token)) {
                 return ImmutableTriple.of(false, "Token不能为空", null);
             }
-
+            
             // 2. 解析token获取Claims
             Claims claims = getJwt(token);
-
+            
             // 3. 检查token是否过期
             if (DateUtil.compare(DateUtil.date(), claims.getExpiration()) >= 0) {
                 return ImmutableTriple.of(false, "Token已过期", claims);
             }
-
+            
             // 4. 检查必要字段(根据业务需求)
             if (claims.get("userId") == null) {
                 return ImmutableTriple.of(false, "无效Token: 缺少userId字段", claims);
             }
-
+            
             // 5. 所有检查通过,返回有效
             return ImmutableTriple.of(true, null, claims);
         } catch (ExpiredJwtException e) {
@@ -153,7 +158,7 @@ public class AuthService {
             return ImmutableTriple.of(false, "无效Token: " + e.getMessage(), null);
         }
     }
-
+    
 }