什么是JWT
JWT是josn web token 的简称是一种用于在网络应用之间安全地传递信息的开放标准。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),他的主要作用是当用户通过身份验证成功后,服务器会生成一个 JWT,并将其作为响应的一部分返回给客户端。客户端在随后的请求中将 JWT 放在请求的头部、URL 参数或者请求体中发送给服务器。服务器接收到 JWT 后,会验证其完整性和有效性,并根据其中的信息对请求进行授权处理。
1.导入依赖
<!-- JWT依赖-->
<dependency>
<groupId> com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.4.0</version>
</dependency>
2.编写生成JWT的工具类
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import java.util.Date;
import java.util.Map;
public class JwtUtil {
private static StringKEY="WYY";
//接收业务数据,生成token并返回
public static StringgenToken(Map claims){
return JWT.create()
.withClaim("claims",claims)
.withExpiresAt(new Date(System.currentTimeMillis()+1000*60*60*12))
.sign(Algorithm.HMAC256(KEY));
}
//接收token,验证token,并返回业务数据
public static MapparseToken(String token){
return JWT.require(Algorithm.HMAC256(KEY))
.build()
.verify(token)
.getClaim("claims")
.asMap();
}
}
3.在controller层的登录接口中使用该工具类,在用户登录的时候生成token,并返回个前端,用户登录后把当前的token存入reids中
u
4.创建一个拦截器,在执行登录和注册以外的方法的时候拦截,后去请求头中的token(图中以Authorization为例),然后再与redis中的token值进行对比判断当期账号是否是登录状态
拦截器
使用拦截器
这样一个简单的登录验证就完成,每当发起请求的时候,除了你写的不拦截的请求地址,他都会在请求头中获取到Authorization的值,如果没有的话,会返回给前端一个401,如果存在Authorization值,会把这个值与redis中的token值进行对比,判断是否相等,相同就进行放行,不行等就拦截返回401,这个与redis中的值进行对比主要是用来实现修改密码功能,和登录时间过长的失效。
如果你不会使用redis下面有一个简单的使用方法可以介绍给你
1.在pom.xml中导入依赖
<dependency>
<groupId>org.springframework.boot
<artifactId>spring-boot-starter-data-redis
</dependency>
2.启动redis(如果没有redis建议去网上找一找资源下一个)
3.以下是一个简单使用的例子