前言
JWT,全称JSON Web Token,将用户信息加密到token中,服务器不保存任何用户信息,服务器通过使用保存的密匙验证token的正确性,只要正确就通过验证。
JWT的原则是在服务器身份验证之后,将生成一个JSON对象并将其发送回用户
组成
一个token三部分组成,三部分用“.”分割,按顺序分为
1、头部(header)
- 声明类型是jwt
- 声明加密算法 通常使用HMAC SHA256
2、载荷(payload)
3、签证(signature)
使用
1、导入pom依赖
<!-- jwt-->
<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.10.3</version>
</dependency>
2、在utils包下新建TokenUtil类,生成token
使用userId作为载荷,以password作为秘钥
package com.aqya.utils;
import cn.hutool.core.date.DateUtil;
import com.aqya.service.IUserService;
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Date;
/**
* @author 阿青呀
* @date 2022/05/11 14:20
**/
public class TokenUtils {
/**
* 生成 Token
* @param userId
* @param sign
* @return
*/
public static String getToken(String userId,String sign){
return JWT.create().withAudience(userId) // 将user id 保存到token 作为载荷
.withExpiresAt(DateUtil.offsetHour(new Date(),2)) //2小时过期
.sign(Algorithm.HMAC256(sign)); //以password 作为 token密匙
}
}
3、在userService里面设置token
在userDto加入字符型token字段,登录业务不需要原来所有的实体类数据,就自己再创建专门登入使用的类userDto,一般就是用户名密码之类必须的,然后将实体类的用户名密码拷贝到