楼主: zhuhaojie11
57 0

[作业] JAVA使用Jwts制作token [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-7-28
最后登录
2018-7-28

楼主
zhuhaojie11 发表于 2025-12-9 15:21:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

在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

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

二维码

扫码加我 拉你入群

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

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

关键词:Token Java jav JWT signature

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-24 23:44