3.0 KiB
3.0 KiB
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 中添加以下配置:
# 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令牌
// 基本用法
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令牌
boolean isValid = JwtUtil.validateToken(token);
3. 从令牌中获取信息
// 获取用户ID
String userId = JwtUtil.getUserIdFromToken(token);
// 获取用户名
String username = JwtUtil.getUsernameFromToken(token);
4. 检查令牌是否过期
boolean isExpired = JwtUtil.isTokenExpired(token);
5. 刷新JWT令牌
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
安全建议
-
密钥安全:
- 使用足够长的随机字符串作为密钥(至少32个字符)
- 不要将密钥硬编码在代码中
- 在生产环境中使用环境变量或配置中心管理密钥
-
过期时间:
- 根据业务需求设置合理的过期时间
- 敏感操作建议使用较短的过期时间
-
HTTPS:
- 在生产环境中始终使用HTTPS传输JWT令牌
依赖说明
项目使用了以下JWT依赖(已在pom.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>