|
@@ -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();
|
|
|
+ }
|
|
|
+}
|