136 lines
3.0 KiB
Markdown
136 lines
3.0 KiB
Markdown
# JWT工具类使用说明
|
|
|
|
## 概述
|
|
|
|
本项目提供了一个完整的JWT(JSON Web Token)工具类,用于生成、验证和解析JWT令牌。
|
|
|
|
## 文件结构
|
|
|
|
```
|
|
src/main/java/com/caiji/uls/utils/jwt/
|
|
├── JwtUtil.java # JWT工具类,提供核心功能
|
|
└── JwtConfig.java # JWT配置类,管理密钥和过期时间
|
|
|
|
src/main/java/com/caiji/uls/config/
|
|
└── JwtConfigInitializer.java # Spring Boot配置初始化类
|
|
|
|
src/main/java/com/caiji/uls/controller/
|
|
└── JwtTestController.java # 测试控制器,演示使用方法
|
|
```
|
|
|
|
## 配置说明
|
|
|
|
在 `application.properties` 中添加以下配置:
|
|
|
|
```properties
|
|
# JWT配置
|
|
jwt.secret=your-secret-key-for-jwt-token-generation-and-validation-must-be-long-enough
|
|
jwt.expiration=86400000
|
|
```
|
|
|
|
- `jwt.secret`: JWT签名密钥(建议至少32个字符)
|
|
- `jwt.expiration`: 令牌过期时间(毫秒),默认为24小时
|
|
|
|
## 主要功能
|
|
|
|
### 1. 生成JWT令牌
|
|
|
|
```java
|
|
// 基本用法
|
|
String token = JwtUtil.generateToken(userId, username);
|
|
|
|
// 带额外声明信息
|
|
Map<String, Object> claims = new HashMap<>();
|
|
claims.put("role", "admin");
|
|
String token = JwtUtil.generateToken(userId, username, claims);
|
|
```
|
|
|
|
### 2. 验证JWT令牌
|
|
|
|
```java
|
|
boolean isValid = JwtUtil.validateToken(token);
|
|
```
|
|
|
|
### 3. 从令牌中获取信息
|
|
|
|
```java
|
|
// 获取用户ID
|
|
String userId = JwtUtil.getUserIdFromToken(token);
|
|
|
|
// 获取用户名
|
|
String username = JwtUtil.getUsernameFromToken(token);
|
|
```
|
|
|
|
### 4. 检查令牌是否过期
|
|
|
|
```java
|
|
boolean isExpired = JwtUtil.isTokenExpired(token);
|
|
```
|
|
|
|
### 5. 刷新JWT令牌
|
|
|
|
```java
|
|
String newToken = JwtUtil.refreshToken(oldToken);
|
|
```
|
|
|
|
## API接口示例
|
|
|
|
启动应用后,可以使用以下API接口测试JWT功能:
|
|
|
|
### 生成令牌
|
|
```
|
|
POST /api/jwt/generate?userId=1&username=testuser
|
|
```
|
|
|
|
### 验证令牌
|
|
```
|
|
POST /api/jwt/validate?token=your_jwt_token_here
|
|
```
|
|
|
|
### 解析令牌
|
|
```
|
|
POST /api/jwt/parse?token=your_jwt_token_here
|
|
```
|
|
|
|
### 刷新令牌
|
|
```
|
|
POST /api/jwt/refresh?token=your_jwt_token_here
|
|
```
|
|
|
|
## 安全建议
|
|
|
|
1. **密钥安全**:
|
|
- 使用足够长的随机字符串作为密钥(至少32个字符)
|
|
- 不要将密钥硬编码在代码中
|
|
- 在生产环境中使用环境变量或配置中心管理密钥
|
|
|
|
2. **过期时间**:
|
|
- 根据业务需求设置合理的过期时间
|
|
- 敏感操作建议使用较短的过期时间
|
|
|
|
3. **HTTPS**:
|
|
- 在生产环境中始终使用HTTPS传输JWT令牌
|
|
|
|
## 依赖说明
|
|
|
|
项目使用了以下JWT依赖(已在pom.xml中配置):
|
|
|
|
```xml
|
|
<dependency>
|
|
<groupId>io.jsonwebtoken</groupId>
|
|
<artifactId>jjwt-api</artifactId>
|
|
<version>0.12.5</version>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>io.jsonwebtoken</groupId>
|
|
<artifactId>jjwt-impl</artifactId>
|
|
<version>0.12.5</version>
|
|
<scope>runtime</scope>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>io.jsonwebtoken</groupId>
|
|
<artifactId>jjwt-jackson</artifactId>
|
|
<version>0.12.5</version>
|
|
<scope>runtime</scope>
|
|
</dependency>
|
|
``` |