当前位置:网站首页>jjwt 生成token
jjwt 生成token
2022-07-27 06:07:00 【qq_34135615】
实现原理

导入maven依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
创建实体对象
package com.wl.study.utils;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SessionInfo {
private Long userId;
private String userName;
private String token;
}
创建token生成与解析
package com.wl.study.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.CompressionCodecs;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.lang3.StringUtils;
import java.text.MessageFormat;
import java.util.Optional;
public class JwtUtil {
/*** * 生成token * @param sessionInfo * @return */
public static Optional<String> generateToken(SessionInfo sessionInfo){
String token = Jwts.builder()
//主题
.setSubject(JwtConfig.JWT_SUBJECT)
//自定义属性
.claim(JwtConfig.JWT_USERID, sessionInfo.getUserId())
.claim(JwtConfig.JWT_USERNAME, sessionInfo.getUserName())
// 压缩
.compressWith(CompressionCodecs.DEFLATE)
// 签名
.signWith(SignatureAlgorithm.HS512, JwtConfig.JWT_SIGNING_KEY)
.compact();
return Optional.of(MessageFormat.format("{0}{1}",JwtConfig.JWT_TOKEN_PREFIX,token));
}
/*** * 解析token * @param token * @return */
public static Optional<SessionInfo> parserToken(String token){
if(StringUtils.isEmpty(token)){
return Optional.empty();
}
Claims claims = Jwts.parser()
.setSigningKey(JwtConfig.JWT_SIGNING_KEY)
.parseClaimsJws(token.replace(JwtConfig.JWT_TOKEN_PREFIX, ""))
.getBody();
SessionInfo sessionInfo = SessionInfo.builder().token(token).build();
if(claims.containsKey(JwtConfig.JWT_USERID)){
sessionInfo.setUserId( Long.valueOf(claims.get(JwtConfig.JWT_USERID).toString()));
}
if(claims.containsKey(JwtConfig.JWT_USERNAME)){
sessionInfo.setUserName( claims.get(JwtConfig.JWT_USERNAME).toString());
}
return Optional.of(sessionInfo);
}
private static class JwtConfig{
private final static String JWT_SUBJECT ="integral";
private final static String JWT_USERID ="userId";
private final static String JWT_USERNAME ="userName";
/*** * 密钥 */
private final static String JWT_SIGNING_KEY = "[email protected]!&key^#";
/** * jwt的前缀 */
public static final String JWT_TOKEN_PREFIX = "Bearer ";
}
public static void main(String[] args) {
SessionInfo sessionInfo = new SessionInfo();
sessionInfo.setUserId(1L);
sessionInfo.setUserName("张飞");
Optional<String> optional = JwtUtil.generateToken(sessionInfo);
System.out.println(MessageFormat.format("{0}:{1}","生成token",optional.orElse(null)));
System.out.println(MessageFormat.format("{0}:{1}","解析token",JwtUtil.parserToken(optional.get())));
}
}
创建token工具类
package com.wl.study.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.CompressionCodecs;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.lang3.StringUtils;
import java.text.MessageFormat;
import java.util.Optional;
public class JwtUtil {
/*** * 生成token * @param sessionInfo * @return */
public static Optional<String> generateToken(SessionInfo sessionInfo){
String token = Jwts.builder()
//主题
.setSubject(JwtConfig.JWT_SUBJECT)
//自定义属性
.claim(JwtConfig.JWT_USERID, sessionInfo.getUserId())
.claim(JwtConfig.JWT_USERNAME, sessionInfo.getUserName())
// 压缩
.compressWith(CompressionCodecs.DEFLATE)
// 签名
.signWith(SignatureAlgorithm.HS512, JwtConfig.JWT_SIGNING_KEY)
.compact();
return Optional.of(MessageFormat.format("{0}{1}",JwtConfig.JWT_TOKEN_PREFIX,token));
}
/*** * 解析token * @param token * @return */
public static Optional<SessionInfo> parserToken(String token){
if(StringUtils.isEmpty(token)){
return Optional.empty();
}
Claims claims = Jwts.parser()
.setSigningKey(JwtConfig.JWT_SIGNING_KEY)
.parseClaimsJws(token.replace(JwtConfig.JWT_TOKEN_PREFIX, ""))
.getBody();
SessionInfo sessionInfo = SessionInfo.builder().token(token).build();
if(claims.containsKey(JwtConfig.JWT_USERID)){
sessionInfo.setUserId( Long.valueOf(claims.get(JwtConfig.JWT_USERID).toString()));
}
if(claims.containsKey(JwtConfig.JWT_USERNAME)){
sessionInfo.setUserName( claims.get(JwtConfig.JWT_USERNAME).toString());
}
return Optional.of(sessionInfo);
}
private static class JwtConfig{
private final static String JWT_SUBJECT ="integral";
private final static String JWT_USERID ="userId";
private final static String JWT_USERNAME ="userName";
/*** * 密钥 */
private final static String JWT_SIGNING_KEY = "[email protected]!&key^#";
/** * jwt的前缀 */
public static final String JWT_TOKEN_PREFIX = "Bearer ";
}
public static void main(String[] args) {
SessionInfo sessionInfo = new SessionInfo();
sessionInfo.setUserId(1L);
sessionInfo.setUserName("张飞");
Optional<String> optional = JwtUtil.generateToken(sessionInfo);
System.out.println(MessageFormat.format("{0}:{1}","生成token",optional.orElse(null)));
System.out.println(MessageFormat.format("{0}:{1}","解析token",JwtUtil.parserToken(optional.get())));
}
}
边栏推荐
- Drools (5): drools basic syntax (3)
- Campus news release management system based on SSM
- 内部类--看这篇就懂啦~
- MySQL limit paging query optimization practice
- DDD Domain Driven Design Notes
- Ci framework learning of PHP
- Oracle数据库问题
- 强网杯2021 pwn 赛题解析——babypwn
- Shell programming specifications and variables
- Algorithm -- Fibonacci sequence (kotlin)
猜你喜欢

MySQL2

Digital image processing -- Chapter 3 gray scale transformation and spatial filtering

Generics -- learn it, and there are many benefits

How MySQL executes query statements

Quartus:往别人的工程添加.v文件报错

零号培训平台课程-2、SSRF基础

火狐浏览器,访问腾讯云服务器的时候,出现建立安全连接失败的问题。

端口转发小结

使用pip命令切换不同的镜像源

Pan Aimin, chairman of instruction set, attended the 2022 ecug con to speak for China's technical forces
随机推荐
Ci framework learning of PHP
How to learn C language? This article gives you the complete answer
Drools (5): drools advanced syntax
整体二分?
算法--斐波那契数列(Kotlin)
Watermelon book learning notes - Chapter 1 and 2
A Competitive Swarm Optimizer for Large Scale Optimization
Reflection on pytorch back propagation
Word wrap: break word line feed is compatible with browsers
DDD Domain Driven Design Notes
Hospital reservation management system based on SSM
请教大佬们一个问题,pgsqlcdc任务运行一段时间就不能监测变化了,重启就可以了,这个该从哪方面入
Consideration on how the covariance of Kalman filter affects the tracking effect of deepsort
如何借助自动化工具落地DevOps|含低代码与DevOps应用实践
[latex format] there are subtitles side by side on the left and right of double columns and double pictures, and subtitles are side by side up and down
Generics -- learn it, and there are many benefits
The qualities that a technical manager should have (guess)
[Vani有约会]雨天的尾巴
【golang学习笔记2.0】 golang中的数组和切片
Drools(5):Drools高级语法