# 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 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 io.jsonwebtoken jjwt-api 0.12.5 io.jsonwebtoken jjwt-impl 0.12.5 runtime io.jsonwebtoken jjwt-jackson 0.12.5 runtime ```