From 8d9a2d656e4ae007590c622e5f7c228adacdca49 Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Fri, 14 Jun 2024 10:11:36 +0800
Subject: [PATCH] 统一风格

---
 src/main/java/com/dji/sample/common/util/JwtUtil.java |   77 ++++++++++++++++++++++++++++----------
 1 files changed, 57 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/dji/sample/common/util/JwtUtil.java b/src/main/java/com/dji/sample/common/util/JwtUtil.java
index 629cea1..c04168e 100644
--- a/src/main/java/com/dji/sample/common/util/JwtUtil.java
+++ b/src/main/java/com/dji/sample/common/util/JwtUtil.java
@@ -2,7 +2,6 @@
 
 import com.auth0.jwt.JWT;
 import com.auth0.jwt.JWTCreator;
-import com.auth0.jwt.JWTVerifier;
 import com.auth0.jwt.algorithms.Algorithm;
 import com.auth0.jwt.exceptions.TokenExpiredException;
 import com.auth0.jwt.interfaces.DecodedJWT;
@@ -10,10 +9,9 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
 
-import java.util.Date;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 
 @Slf4j
 @Component
@@ -27,7 +25,7 @@
 
     private static String secret;
 
-    private static Algorithm algorithm;
+    public static Algorithm algorithm;
 
     @Value("${jwt.issuer: DJI}")
     private void setIssuer(String issuer) {
@@ -63,15 +61,55 @@
      * @param claims custom information
      * @return token
      */
-    public static String createToken(Map<String, String> claims) {
+    public static String createToken(Map<String, ?> claims) {
+        return JwtUtil.createToken(claims, age, algorithm, subject, issuer);
+    }
+
+    /**
+     *
+     * @param claims
+     * @param age       unit: s
+     * @param algorithm
+     * @param subject
+     * @param issuer
+     * @return
+     */
+    public static String createToken(Map<String, ?> claims, Long age, Algorithm algorithm, String subject, String issuer) {
+        if (Objects.isNull(algorithm)) {
+            throw new IllegalArgumentException();
+        }
+
         Date now = new Date();
         JWTCreator.Builder builder = JWT.create();
         // Add custom information to the token's payload segment.
-        claims.forEach(builder::withClaim);
-        String token = builder.withIssuer(issuer)
-                .withSubject(subject)
+        claims.forEach((k, v) -> {
+            if (Objects.nonNull(v.getClass().getClassLoader())) {
+                log.error("claim can't be set to a custom object.");
+                return;
+            }
+            if (v instanceof Map) {
+                builder.withClaim(k, (Map) v);
+            } else if (v instanceof List) {
+                builder.withClaim(k, (List) v);
+            } else {
+                builder.withClaim(k, String.valueOf(v));
+            }
+        });
+
+        if (StringUtils.hasText(subject)) {
+            builder.withSubject(subject);
+        }
+
+        if (StringUtils.hasText(issuer)) {
+            builder.withIssuer(issuer);
+        }
+
+        if (Objects.nonNull(age)) {
+            builder.withExpiresAt(new Date(now.getTime() + age * 1000));
+        }
+
+        String token = builder
                 .withIssuedAt(now)
-                .withExpiresAt(new Date(now.getTime() + age))
                 .withNotBefore(now)
                 .sign(algorithm);
         log.debug("token created. " + token);
@@ -85,14 +123,7 @@
      * @throws TokenExpiredException
      */
     public static DecodedJWT verifyToken(String token) {
-        try {
-            JWTVerifier verifier = JWT.require(algorithm).build();
-            return verifier.verify(token);
-        } catch (Exception e) {
-            log.error(e.getMessage());
-            e.printStackTrace();
-            return null;
-        }
+        return JWT.require(algorithm).build().verify(token);
     }
 
     /**
@@ -101,7 +132,13 @@
      * @return custom claim
      */
     public static Optional<CustomClaim> parseToken(String token) {
-        DecodedJWT jwt = verifyToken(token);
-        return jwt == null ? Optional.empty() : Optional.of(new CustomClaim(jwt.getClaims()));
+        DecodedJWT jwt;
+        try {
+            jwt = verifyToken(token);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Optional.empty();
+        }
+        return Optional.of(new CustomClaim(jwt.getClaims()));
     }
 }

--
Gitblit v1.9.3