案例代码

导入JWT的Maven坐标

1
2
3
4
5
6
<!--跨域身份验证解决⽅案 Json web token包-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>

创建JWTUtil工具包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package top.marken.onlineclass.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import top.marken.onlineclass.model.entity.User;

import java.util.Date;

public class JWTUtil {
/**
* 主题,是由谁颁布的
*/
private static final String SUBJECT = "online_class";
/**
* 过期时间,一周
*/
private static final int EXPIRE = 60000 * 60 * 24 * 7;
/**
* 加密密钥
*/
private static final String SECRET = "online_class";
/**
* 令牌前缀
*/
private static final String TOKEN_PREFIX = "online_class";

/**
* 通过一个User对象生成一个JWT令牌
* @param user
* @return
*/
public static String generateJWT(User user) {
String token = Jwts.builder()
// 设置主题
.setSubject(SUBJECT)
// 设置负载信息
.claim("head_img",user.getHeadImg())
.claim("id",user.getId())
.claim("name",user.getName())
// 设置发布时间
.setIssuedAt(new Date())
// 设置过期时间
.setExpiration(new Date(System.currentTimeMillis() + EXPIRE))
// 设置加密规则和密钥
.signWith(SignatureAlgorithm.HS256,SECRET)
// 生成令牌
.compact();
// 给令牌加上前缀(更安全)
token = TOKEN_PREFIX + token;
return token;
}

/**
* 校验token令牌是否合法
* @param token
* @return
*/
public static Claims checkJWT(String token) {
try{
return Jwts.parser()
// 填入密钥
.setSigningKey(SECRET)
// 替换令牌前缀
.parseClaimsJws(token.replace(TOKEN_PREFIX,""))
// 获取负载信息
.getBody();
}catch (Exception e){
return null;
}
}
}