全部版块 我的主页
论坛 数据科学与人工智能 IT基础 JAVA语言开发
56 0
2025-12-09

在Java应用中,利用JWT(JSON Web Tokens)实现token的生成与验证是一种广泛采用的技术方案,尤其适用于无状态认证架构。通过引入流行的Java JWT库,可以高效地完成token的签发和解析工作。

以下是一个基于Jwts工具类实现的token生成示例:

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;

public class JwtUtils {
    public static String generateToken(JwtUser jwtUser) {
        // 定义token有效期为1小时
        long expirationTime = 1000 * 60 * 60;
        Date expireDate = new Date(System.currentTimeMillis() + expirationTime);
        
        return Jwts.builder()
            .setSubject(jwtUser.getUserName()) // 设置用户标识
            .claim(CommonConstant.QW_USER_ID, jwtUser.getQwUserId())  // 添加自定义字段
            .claim(CommonConstant.STAFF_NUMBER, jwtUser.getStaffNumber())  // 添加自定义字段
            .setIssuedAt(new Date())         // 记录签发时间
            .setExpiration(expireDate)       // 设定过期时间
            .signWith(SignatureAlgorithm.HS512, CommonConstant.JWT_SECRET_KEY) // 使用密钥签名
            .compact();
    }
}
jjwt

当用户成功登录后,系统可调用上述方法生成对应的token,并将该token返回给客户端。客户端需在后续每次请求中携带此token,以便服务端进行身份识别与权限校验。

服务端接收到请求时,可通过解析token获取其中包含的信息,进而判断请求的合法性。解析过程通常包括验证签名、检查过期时间等步骤。

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

public class JwtUtils {

    public static String generateToken(JwtUser jwtUser) {
        // 设置过期时间(1小时)
        long expirationTime = 1000 * 60 * 60;
        Date expireDate = new Date(System.currentTimeMillis() + expirationTime);

        return Jwts.builder()
                .setSubject(jwtUser.getUserName()) // 用户标识
                .claim(CommonConstant.QW_USER_ID, jwtUser.getQwUserId())  // 自定义信息
                .claim(CommonConstant.STAFF_NUMBER, jwtUser.getStaffNumber())  // 自定义信息
                .setIssuedAt(new Date())         // 签发时间
                .setExpiration(expireDate)       // 过期时间
                .signWith(SignatureAlgorithm.HS512, CommonConstant.JWT_SECRET_KEY) // 密钥
                .compact();
    }

}

token解析相关逻辑示意如下:

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureException;

public class JwtUtil {
    private static final String SECRET_KEY = "mySecretKey"; // 确保与生成token时使用的密钥一致
    
    public static Claims parseToken(String token) {
        try {
            return Jwts.parser()
                    .setSigningKey(SECRET_KEY)
                    .parseClaimsJws(token)
                    .getBody();
        } catch (SignatureException e) {
            // 签名不匹配,token无效
            System.out.println("Invalid token");
        } catch (Exception e) {
            // 其他异常处理,例如token过期等
            System.out.println("Token error: " + e.getMessage());
        }
        return null; // 如果解析失败返回null或者抛出异常根据需要处理
    }
}

通过generateToken方法生成token后,可在客户端保存并随请求头传递。服务端则使用对应的解析机制对token进行处理,提取用户信息并执行权限控制等相关操作。

generateToken

在整个流程中,确保token的安全性至关重要。因此,建议使用强密钥(如HS512算法)、合理设置过期时间,并避免在token中存放敏感数据。

parseToken

以下是完整的工具类结构示意:

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群