JWT简洁版

Posted abking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JWT简洁版相关的知识,希望对你有一定的参考价值。

添加Constant类

 1 package top.bigking.constant;
 2 
 3 /**
 4  * @Author ABKing
 5  * @since 2020/5/14 下午5:58
 6  **/
 7 
 8 public class Constant {
 9 
10     /**
11      * 数据请求返回码
12      */
13     public static final int RESCODE_SUCCESS = 1000;             //成功
14     public static final int RESCODE_SUCCESS_MSG = 1001;          //成功(有返回信息)
15     public static final int RESCODE_EXCEPTION = 1002;        //请求抛出异常
16     public static final int RESCODE_NOLOGIN = 1003;             //未登陆状态
17     public static final int RESCODE_NOEXIST = 1004;             //查询结果为空
18     public static final int RESCODE_NOAUTH = 1005;          //无操作权限
19     public static final int RESCODE_LOGINEXPIRE = 1006;             //登录过期
20     /**
21      * token
22      */
23     public static final int JWT_ERRCODE_EXPIRE = 1007;//Token过期
24     public static final int JWT_ERRCODE_FAIL = 1008;//验证不通过
25 
26     /**
27      * jwt
28      */
29     public static final String JWT_ID = "jwt-ABKing";//jwt签发者
30     public static final String JWT_SECRET = "Isi5Ob9OfvJt+4IHoMJlHkS1ttg=";//密匙
31     public static final int JWT_TTL = 60*60*1000; // 60*60*1000;  //millisecond
32     public static final int JWT_REFRESH_INTERVAL = 18*1000; //55*60*1000;  //millisecond
33     public static final int JWT_REFRESH_TTL = 60*1000; // 12*60*60*1000;  //millisecond
34 
35 }

 

添加JwtUtil类

 1 package top.bigking.util;
 2 
 3 /**
 4  * @Author ABKing
 5  * @since 2020/5/21 下午6:30
 6  **/
 7 
 8 import java.util.Date;
 9 
10 import javax.crypto.SecretKey;
11 import javax.crypto.spec.SecretKeySpec;
12 
13 import org.apache.commons.codec.binary.Base64;
14 
15 
16 import io.jsonwebtoken.Claims;
17 import io.jsonwebtoken.ExpiredJwtException;
18 import io.jsonwebtoken.JwtBuilder;
19 import io.jsonwebtoken.Jwts;
20 import io.jsonwebtoken.MalformedJwtException;
21 import io.jsonwebtoken.SignatureAlgorithm;
22 import io.jsonwebtoken.SignatureException;
23 import io.jsonwebtoken.UnsupportedJwtException;
24 
25 /**
26  * JWTUtils工具类,生成jwt和解析jwt
27  * JSON WEB TOKEN 结构组成:
28  * (1)Header(头部):包含加密算法,通常直接使用 HMAC SHA256
29  * (2)Payload(负载):存放有效信息,比如消息体、签发者、过期时间、签发时间等
30  * (3)Signature(签名):由header(base64后的)+payload(base64后的)+secret(秘钥)三部分组合,然后通过head中声明的算法进行加密
31  * @author sixmonth
32  * @date 2019年3月20日
33  *
34  */
35 public class JwtUtil {
36 
37     static String SECRETKEY = "KJHUhjjJYgYUllVbXhKDHXhkSyHjlNiVkYzWTBac1Yxkjhuad";
38 
39     /**
40      * 由字符串生成加密key
41      *
42      * @return
43      */
44     public static SecretKey generalKey(String stringKey) {
45         byte[] encodedKey = Base64.decodeBase64(stringKey);
46         SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "HmacSHA256");
47         return key;
48     }
49 
50     /**
51      * 创建jwt
52      * @param id 唯一id,uuid即可
53      * @param subject json形式字符串或字符串,增加用户非敏感信息存储,如用户id或用户账号,与token解析后进行对比,防止乱用
54      * @param expirationDate  生成jwt的有效期,单位秒
55      * @return jwt token
56      * @throws Exception
57      */
58     public static String createJWT(String uuid, String subject, long expirationDate) throws Exception {
59         SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
60         long nowMillis = System.currentTimeMillis();
61         Date now = new Date(nowMillis);
62         SecretKey key = generalKey(SECRETKEY);
63         JwtBuilder builder = Jwts.builder().setIssuer("").setId(uuid).setIssuedAt(now).setSubject(subject)
64                 .signWith(signatureAlgorithm, key);
65         if (expirationDate >= 0) {
66             long expMillis = nowMillis + expirationDate*1000;
67             Date exp = new Date(expMillis);
68             builder.setExpiration(exp);
69         }
70         return builder.compact();
71     }
72 
73     /**
74      * 解密jwt,获取实体
75      * @param jwt
76      */
77     public static Claims parseJWT(String jwt) throws ExpiredJwtException, UnsupportedJwtException,
78             MalformedJwtException, SignatureException, IllegalArgumentException {
79         SecretKey key = generalKey(SECRETKEY);
80         Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(jwt).getBody();
81         return claims;
82     }
83 
84 }

pom.xml

 1     <!--  json web token  -->
 2     <dependency>
 3       <groupId>io.jsonwebtoken</groupId>
 4       <artifactId>jjwt-api</artifactId>
 5       <version>0.10.5</version>
 6     </dependency>
 7     <dependency>
 8       <groupId>io.jsonwebtoken</groupId>
 9       <artifactId>jjwt-impl</artifactId>
10       <version>0.10.5</version>
11       <scope>runtime</scope>
12     </dependency>
13     <dependency>
14       <groupId>io.jsonwebtoken</groupId>
15       <artifactId>jjwt-jackson</artifactId>
16       <version>0.10.5</version>
17       <scope>runtime</scope>
18     </dependency>
19     <dependency>
20       <groupId>com.alibaba</groupId>
21       <artifactId>fastjson</artifactId>
22       <version>1.2.56</version>
23     </dependency>
24     <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
25     <dependency>
26       <groupId>commons-codec</groupId>
27       <artifactId>commons-codec</artifactId>
28       <version>1.10</version>
29     </dependency>

 

以上是关于JWT简洁版的主要内容,如果未能解决你的问题,请参考以下文章

编写代码片段的更简洁的方法

20个简洁的 JS 代码片段

20个简洁的 JS 代码片段

python web 购物车思路简洁版

SpringBoot集成JWT实现token验证

SpringBoot集成JWT实现token验证