JJWT是什么
JJWT 是一个纯 Java 实现,完全基于 JWT、JWS、JWE、JWK 和 JWA RFC 规范,并根据 Apache 2.0 许可证的条款进行开源。
使用JJWT
导入maven依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred -->
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
创建和验证JWT
public class JJWTTokenUtil {
/**
* token密钥
* 因为使用的是HS256,所以需要大于32个字节
*/
private static final String SECRET_KEY=Encoders.BASE64.encode("JHSDKHSDGH7688768HShsdjsHSDKhns8978sds*".getBytes());
/**
* 设置过期时间
*/
private static final Date EXPIRE_DATE=new Date(System.currentTimeMillis()+1000*60*60*24); //1天
/**
* 创建Token
*/
public static String createToken(Map<String,Object> map){
//规定签名的算法
SignatureAlgorithm signatureAlgorithm=SignatureAlgorithm.HS256;
return Jwts.builder()
.setClaims(map) //负载的数据
.setExpiration(EXPIRE_DATE) //过期时间
.signWith(signatureAlgorithm,SECRET_KEY) //签名
.compact(); //生成jws
}
/**
* 验证Token
*/
public static Map<String,Object> verifyToken(String jws){
try{
return Jwts.parserBuilder()
.setSigningKey(SECRET_KEY) //响应的密钥
.build()
.parseClaimsJws(jws).getBody(); //生成Claims主体,其中负载相关的信息
}catch (JwtException e){
e.printStackTrace();
return null;
}
}
}
测试
@Test
void testToken(){
Map<String,Object> map=new HashMap<>();
map.put("name","张三");
map.put("password","sds3434dfdf34");
String jws=JJWTTokenUtil.createToken(map);
System.out.println(jws);
Map<String, Object> map1 = JJWTTokenUtil.verifyToken(jws);
System.out.println(map1.get("name"));
System.out.println(map1.get("password"));
}
结果:
eyJhbGciOiJIUzI1NiJ9.eyJwYXNzd29yZCI6InNkczM0MzRkZmRmMzQiLCJuYW1lIjoi5byg5LiJIiwiZXhwIjoxNjY2NzA2NDk5fQ.sERrz_mFDv2BTx2GTuBtALbod8Fgq5MzSZm334uK3OY
张三
sds3434dfdf34
参考: https://github.com/jwtk/jjwt