JWT简单使用
创建一个Maven项目,并导入jar包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qbb</groupId>
<artifactId>jwt</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- JWT -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
测试案例
使用jwt获取token
public class JwtUtils {
// 过期时间
public static final long EXPIRE = 30 * 1000;
// APP_SECRET
public static final String APP_SECRET = "QIUQIU&LL";
/**
* 获取token
* @param id
* @param nickName
* @param avatar
* @return
*/
public static String genJwt(String id, String nickName, String avatar) {
// 创建Jwt对象
JwtBuilder builder = Jwts.builder();
// 第一部分 JWT头部 header
builder.setHeaderParam("alg", "HS256"); // 签名算法,默认值
builder.setHeaderParam("typ", "JWT"); // 令牌类型,默认值
// 第二部分 有效载荷 playload
// 默认字段
builder.setId("1"); // jwt唯一身份标识
builder.setSubject("qbb-user"); // 令牌的主题
builder.setIssuedAt(new Date()); // 签发时间
builder.setExpiration(new Date(System.currentTimeMillis() + EXPIRE));// 设置过期时间
// 私有字段
builder.claim("id", id);
builder.claim("nickName", nickName);
builder.claim("avatar", avatar);
// 第三部分 签名Hash
builder.signWith(SignatureAlgorithm.HS256, APP_SECRET);
// 将三部分连接起来
String token = builder.compact();
return token;
}
}
@Test
public void testGenJwt() {
Member member = new Member();
member.setId("100");
member.setNickName("qbb");
member.setAvatar("hello.jpg");
String token = JwtUtils.genJwt(member.getId(), member.getNickName(), member.getAvatar());
System.out.println(token);
}
result: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIxIiwic3ViIjoicWJiLXVzZXIiLCJpYXQiOjE2NDYyMzEwMjcsImV4cCI6MTY0NjIzMTA1NywiaWQiOiIxMDAiLCJuaWNrTmFtZSI6InFiYiIsImF2YXRhciI6ImhlbGxvLmpwZyJ9.x5Rxka-J-HPOL_fM1zIxAl9y45UzQJWu_xI-s5Bzfuc
解析jwtToken
/**
* 解析jwtToken
* @param jwtToekn
* @return
*/
public static Claims checkJwt(String jwtToekn) {
// 获取解析器
JwtParser parser = Jwts.parser();
Jws<Claims> claimsJws = parser.setSigningKey(APP_SECRET).parseClaimsJws(jwtToekn);
JwsHeader header = claimsJws.getHeader();
Claims body = claimsJws.getBody();
String signature = claimsJws.getSignature();
System.out.println("header:" + header);
System.out.println("body:" + body);
System.out.println("signature:" + signature);
return body;
}
@Test
public void testCheckJwt() {
Claims claims = JwtUtils.checkJwt("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIxIiwic3ViIjoicWJiLXVzZXIiLCJpYXQiOjE2NDYyMzEwMjcsImV4cCI6MTY0NjIzMTA1NywiaWQiOiIxMDAiLCJuaWNrTmFtZSI6InFiYiIsImF2YXRhciI6ImhlbGxvLmpwZyJ9.x5Rxka-J-HPOL_fM1zIxAl9y45UzQJWu_xI-s5Bzfuc");
String id = (String) claims.get("id");
String nickName = (String) claims.get("nickName");
String avatar = (String) claims.get("avatar");
System.out.println(id);
System.out.println(nickName);
System.out.println(avatar);
}
注意:测试的时候记得把测试时间设置长一点,不然会报错哦~ io.jsonwebtoken.ExpiredJwtException
分类:
其他
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具