Explorar el Código

feat:添加jwt工具类

liuchuanwei hace 1 mes
padre
commit
dfcd487ba7
Se han modificado 2 ficheros con 111 adiciones y 0 borrados
  1. 19 0
      pom.xml
  2. 92 0
      src/main/java/com/anyway/util/JwtUtils.java

+ 19 - 0
pom.xml

@@ -139,5 +139,24 @@
             <artifactId>guava</artifactId>
             <version>33.2.1-jre</version>
         </dependency>
+
+        <!-- JWT -->
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-api</artifactId>
+            <version>0.10.7</version>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-impl</artifactId>
+            <version>0.10.7</version>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-jackson</artifactId>
+            <version>0.10.7</version>
+            <scope>runtime</scope>
+        </dependency>
     </dependencies>
 </project>

+ 92 - 0
src/main/java/com/anyway/util/JwtUtils.java

@@ -0,0 +1,92 @@
+package com.anyway.util;
+
+import io.jsonwebtoken.*;
+import io.jsonwebtoken.security.SignatureException;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.crypto.spec.SecretKeySpec;
+import java.security.Key;
+import java.util.Date;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * JSON Web Token 工具类
+ *
+ * @author LiuChuanWei
+ * @date 2019-12-11
+ */
+@Slf4j
+public class JwtUtils {
+
+    /**
+     * token 请求头
+     */
+    public static final String TOKEN_HEADER = "Authorization";
+
+    /**
+     * key(按照签名算法的字节长度设置key)
+     */
+    private final static String SECRET_KEY = "Yq0xcQit0QKDqGKiQDXIWoBKH3vCKeeo";
+    private final static Key KEY = new SecretKeySpec(SECRET_KEY.getBytes(), SignatureAlgorithm.HS256.getJcaName());
+
+    /**
+     * 过期时间(毫秒单位)
+     */
+    private final static long TOKEN_EXPIRE_MILLIS = 1000 * 60 * 60;
+
+    /**
+     * 创建token
+     * @param claimMap
+     * @return
+     */
+    public static String createToken(Map<String, Object> claimMap) {
+        long currentTimeMillis = System.currentTimeMillis();
+        return Jwts.builder()
+                .setId(UUID.randomUUID().toString())
+                .setIssuedAt(new Date(currentTimeMillis))    // 设置签发时间
+                .setExpiration(new Date(currentTimeMillis + TOKEN_EXPIRE_MILLIS))   // 设置过期时间
+                .addClaims(claimMap)
+                .signWith(KEY)
+                .compact();
+    }
+
+    /**
+     * 验证token
+     * @param token
+     * @return 0 验证成功,1、2、3、4、5 验证失败
+     */
+    public static int verifyToken(String token) {
+        try {
+            Jwts.parser().setSigningKey(KEY).parseClaimsJws(token);
+            return 0;
+        } catch (ExpiredJwtException e) {
+            log.error(e.getMessage(), e);
+            return 1;
+        } catch (UnsupportedJwtException e) {
+            log.error(e.getMessage(), e);
+            return 2;
+        } catch (MalformedJwtException e) {
+            log.error(e.getMessage(), e);
+            return 3;
+        } catch (SignatureException e) {
+            log.error(e.getMessage(), e);
+            return 4;
+        } catch (IllegalArgumentException e) {
+            log.error(e.getMessage(), e);
+            return 5;
+        }
+    }
+
+    /**
+     * 解析token
+     * @param token
+     * @return
+     */
+    public static Map<String, Object> parseToken(String token) {
+        return Jwts.parser()  // 得到DefaultJwtParser
+                .setSigningKey(KEY) // 设置签名密钥
+                .parseClaimsJws(token)
+                .getBody();
+    }
+}