From a7aaeabc7873a0eafb4a7ecad7f65b018b7a9bc9 Mon Sep 17 00:00:00 2001
From: sean.zhou <sean.zhou@dji.com>
Date: Fri, 24 Feb 2023 19:31:23 +0800
Subject: [PATCH] What's new? 1. Add license for dock. 2. Modify the logic corresponding to the firmware file and device type. 3. Add multiple mqtt clients options. 4. Modify the structure of the interface for obtaining the device list. 5. Fixed some issues.

---
 src/main/java/com/dji/sample/common/util/JwtUtil.java |   57 ++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 48 insertions(+), 9 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 918f1d7..c04168e 100644
--- a/src/main/java/com/dji/sample/common/util/JwtUtil.java
+++ b/src/main/java/com/dji/sample/common/util/JwtUtil.java
@@ -9,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
@@ -26,7 +25,7 @@
 
     private static String secret;
 
-    private static Algorithm algorithm;
+    public static Algorithm algorithm;
 
     @Value("${jwt.issuer: DJI}")
     private void setIssuer(String issuer) {
@@ -62,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);

--
Gitblit v1.9.3