typora-copy-images-to: img
JWT使用指南
1.导入依赖
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.10.3</version>
</dependency>
2.编写工具类
public class JWTUtils {
// 签名密钥
private static final String SECRET = "wolf";
/**
* 生成token
* @param payload token携带的信息
* @return token字符串
*/
public static String getToken(Map<String,String> payload){
// 指定token过期时间为7天
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, 7);
JWTCreator.Builder builder = JWT.create();
// 构建payload
payload.forEach((k,v) -> builder.withClaim(k,v));
// 指定过期时间和签名算法
String token = builder.withExpiresAt(calendar.getTime()).sign(Algorithm.HMAC256(SECRET));
return token;
}
/**
* 解析token
* @param token token字符串
* @return 解析后的token
*/
public static DecodedJWT decode(String token){
JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
DecodedJWT decodedJWT = jwtVerifier.verify(token);
return decodedJWT;
}
}
3.业务逻辑
-
登录验证通过后,生成一个随机的token(这一步基本就是redis工具类中写好的)
-
将第一步中的token作为JWT的payload生成JWT字符串返回给前端(自动忽略废话代码,可能没优化)
-
后端发送(img/1644847590147.png)]
-
前端接收(img/1644847630317.png)]
-
前端之后每次请求设置请求头(img/1644847723704.png)]
-
后端拦截器设置
-
基本完成