Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[线程安全] TokenProvider类中复用 JwtBuilder 实例导致并发环境下 Token 生成错误 #870

Open
zxm82081372 opened this issue Feb 22, 2025 · 0 comments

Comments

@zxm82081372
Copy link

问题描述
在版本 0.11.5 中,JwtBuilder 实例被作为类的成员变量复用,当多个线程并发调用 createToken 方法时,由于 JwtBuilder 非线程安全,其内部状态(如 Claims、Subject 等)可能被覆盖,导致生成的 Token 包含错误数据或发生不可预测的异常。

重现步骤

  1. 在 Spring Boot 应用中定义类似 TokenProvider 的组件,复用 JwtBuilder 实例。
  2. 使用多线程(如 JMeter 或并发测试工具)频繁调用 createToken 方法生成 Token。
  3. 观察生成的 Token 内容是否包含混乱的 Claims 或 Subject。

预期行为
每次生成 Token 时,JwtBuilder 应独立操作,确保 Claims 和 Subject 正确性。

实际行为
高并发时生成的 Token 可能包含其他线程设置的 Claims 或 Subject。

代码示例(问题片段)

// 错误用法:复用 JwtBuilder 实例
private JwtBuilder jwtBuilder;

public String createToken(JwtUserDto user) {
    Map<String, Object> claims = new HashMap<>(6);
    claims.put("userId", user.getId());
    return jwtBuilder  // 多线程操作此实例会导致状态竞争
            .setClaims(claims)
            .setSubject(user.getUsername())
            .compact();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant