目录
(4)准备好登录逻辑代码(Dao、Service、Controller)
1.背景介绍
JWT在之前文章提到过,JWT(JSON Web Token)是一种用于身份验证和授权的开放标准(RFC 7519),它允许在网络中安全地传输声明(claims)作为 JSON 对象。JWT 可以通过数字签名或加密来验证数据的完整性和真实性,从而保证数据在传输过程中不被篡改。
工作流程:
- 用户通过用户名和密码等方式进行身份验证。
- 服务器验证用户身份,并生成一个 JWT。
- 服务器将 JWT 发送给客户端。
- 客户端将 JWT 存储起来,通常是在本地存储或者内存中。
- 客户端将 JWT 添加到每个后续的 HTTP 请求的 Authorization 头部中。
- 服务器收到请求后,解析 JWT 并验证签名。
- 如果验证通过,则处理请求;如果验证失败,则拒绝请求。
2.前提工作
1.Redis,用于将生成的token存入其中
2.用户登录Controller
3.Jwtutils、相关依赖
4.拦截器JwtInterceptor
5.配置类WebMvcConfig,用于注册拦截器
3.具体代码
(1)相关依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
(2)相关配置文件
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/login?useSSL=false&serverTimezone=UTC
username: #自己的数据库用户名
password: #自己的数据库密码
redis:
host: localhost
port: 6379
mybatis:
mapper-locations: classpath:mapper/*.xml
jwt:
secret: T7e3t3AhK9kS2DdF6gZr4e7hWmYq3t5vT7e3t3AhK9kS2DdF6gZr4e7hWmYq3t5vT7e3t3AhK9kS2DdF6gZr4e7hWmYq3t5vT7e3t3AhK9kS2DdF6gZr4e7hWmYq3t5v
expiration: 864000
(3)JwtUtils类
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonweb