Files
Uni_Login_system/doc/JWT_USAGE.md
T
2026-05-31 04:46:30 +08:00

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

安全建议

  1. 密钥安全:

    • 使用足够长的随机字符串作为密钥(至少32个字符)
    • 不要将密钥硬编码在代码中
    • 在生产环境中使用环境变量或配置中心管理密钥
  2. 过期时间:

    • 根据业务需求设置合理的过期时间
    • 敏感操作建议使用较短的过期时间
  3. 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>