目录
一、导包
JDK8只需要一个jar包
<!--Jwt-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
二、编写JWT工具类
public class JwtUtil {
// 过期时间 一天
private static final Long EXPIRE = 1000L * 60 * 60 * 24;
// 密钥
private static final String SECRET = "123456";
public static String setJwtToken(String data) {
return Jwts.builder()
// jwt头信息
.setHeaderParam("typ", "JWT")
.setHeaderParam("alg", "HS256")
// 当前时间
.setIssuedAt(new Date())
// 过期时间
.setExpiration(new Date(System.currentTimeMillis() + EXPIRE))
// 存储用户信息
.claim("data", data)
// 加密算法 密钥
.signWith(SignatureAlgorithm.HS256, SECRET)
.compact();
}
public static String getJwtToken(String token) {
if (StringUtils.isEmpty(token)) return null;
try {
// 解密
Jws<Claims> jws = Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token);
String data = String.valueOf(jws.getBody().get("data"));
return data;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
前端访问后端时会把Token放在响应头发送给后端;
JWT缺点:不能获取用户状态(不知道当前用户还在不在页面上);令牌发放不能回收;
解决方案:在redis中存入废弃的jwt