我是靠谱客的博主 漂亮草丛,这篇文章主要介绍JWT工具类,现在分享给大家,希望可以做个参考。

JWT工具类

依赖导入

复制代码
1
2
3
4
5
6
7
<!-- jwt处理框架--> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.10.1</version> </dependency>
复制代码
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
/** * 获取HttpServlet子对象 */ public class HttpServletUtil { /** * 获取ServletRequestAttributes对象 */ public static ServletRequestAttributes getServletRequest(){ return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); } /** * 获取HttpServletRequest对象 */ public static HttpServletRequest getRequest(){ return getServletRequest().getRequest(); } /** * 获取HttpServletResponse对象 */ public static HttpServletResponse getResponse(){ return getServletRequest().getResponse(); } /** * 获取请求参数 */ public static String getParameter(String param){ return getRequest().getParameter(param); } /** * 获取请求参数,带默认值 */ public static String getParameter(String param, String defaultValue){ String parameter = getRequest().getParameter(param); return StringUtils.isEmpty(parameter) ? defaultValue : parameter; } /** * 获取请求参数转换为int类型 */ public static Integer getParameterInt(String param){ return Integer.valueOf(getRequest().getParameter(param)); } /** * 获取请求参数转换为int类型,带默认值 */ public static Integer getParameterInt(String param, Integer defaultValue){ return Integer.valueOf(getParameter(param, String.valueOf(defaultValue))); } }
复制代码
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
@Slf4j public class JwtUtil { /** * 生成JwtToken * * @param username 用户名 * @param secret 秘钥 * @param amount 过期天数 */ public static String getToken(String username, String secret, int amount) { User user = new User(); user.setUsername(username); return getToken(user, secret, amount); } /** * 生成JwtToken * * @param user 用户对象 * @param secret 秘钥 * @param amount 过期天数 */ public static String getToken(User user, String secret, int amount) { // 过期时间 Calendar ca = Calendar.getInstance(); ca.add(Calendar.DATE, amount); // 随机Claim String random = getRandomString(6); // 创建JwtToken对象 String token = ""; token = JWT.create() // 用户名 .withSubject(user.getUsername()) // 发布时间 .withIssuedAt(new Date()) // 过期时间 .withExpiresAt(ca.getTime()) // 自定义随机Claim .withClaim("ran", random) .sign(getSecret(secret, random)); return token; } /** * 获取请求对象中的token数据 */ public static String getRequestToken(HttpServletRequest request) { // 获取JwtTokens失败 String authorization = request.getHeader("authorization"); log.info("token=========>" + authorization); if (authorization == null || !authorization.startsWith("Bearer ")) { throw new ResultException(JwtResultEnums.TOKEN_ERROR); } //因为有前缀,所以要去掉前缀 return authorization.substring(7); } /** * 获取当前token中的用户名 */ public static String getSubject() { HttpServletRequest request = getRequest(); String token = getRequestToken(request); return JWT.decode(token).getSubject(); } /** * 验证JwtToken * * @param token JwtToken数据 * @return true 验证通过 * @throws TokenExpiredException Token过期 * @throws JWTVerificationException 令牌无效(验证不通过) */ public static void verifyToken(String token, String secret) throws JWTVerificationException { String ran = JWT.decode(token).getClaim("ran").asString(); log.info("验证JwtToken"); JWTVerifier jwtVerifier = JWT.require(getSecret(secret, ran)).build(); jwtVerifier.verify(token); } /** * 生成Secret混淆数据 */ private static Algorithm getSecret(String secret, String random) { String salt = "君不见黄河之水天上来,奔流到海不复回。君不见高堂明镜悲白发,朝如青丝暮成雪。"; //String salt = "元嘉草草,封狼居胥,赢得仓皇北顾。四十三年,望中犹记,烽火扬州路。可堪回首,佛狸祠下,一片神鸦社鼓。凭谁问、廉颇老矣,尚能饭否?"; //String salt = "安能摧眉折腰事权贵,使我不得开心颜。"; //String salt = "大江东去,浪淘尽,千古风流人物。故垒西边,人道是,三国周郎赤壁。乱石穿空,惊涛拍岸,卷起千堆雪。江山如画,一时多少豪杰。"; return Algorithm.HMAC256(secret + salt + "(ノ ̄▽ ̄)ノ 皮一下" + random); } /** * 获取随机位数的字符串 * @param length 随机位数 */ public static String getRandomString(int length) { Random random = new Random(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < length; i++) { // 获取ascii码中的字符 数字48-57 小写65-90 大写97-122 int range = random.nextInt(75)+48; range = range<97?(range<65?(range>57?114-range:range):(range>90?180-range:range)):range; sb.append((char)range); } return sb.toString(); } }

最后

以上就是漂亮草丛最近收集整理的关于JWT工具类的全部内容,更多相关JWT工具类内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(130)

评论列表共有 0 条评论

立即
投稿
返回
顶部