当前位置: 首页 > backend >正文

Java-jwt4.4.0版本使用

在 Spring Boot 中使用 Auth0 的 java-jwt 4.4.0 版本生成 JWT Token 的步骤如下:


1. 添加依赖

确保 pom.xml 中添加 java-jwt 依赖:

<dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.4.0</version>
</dependency>

2. 配置 JWT 工具类

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.util.Date;public class JwtUtil {private static final String SECRET = "YourSecretKeyHere1234567890"; // 密钥(至少256位)private static final Algorithm ALGORITHM = Algorithm.HMAC256(SECRET); // 使用 HMAC256 算法private static final long EXPIRATION_MS = 3600000; // Token 有效期(1小时)// 生成 Tokenpublic static String generateToken(String username) {return JWT.create().withSubject(username) // 主题(用户标识).withIssuedAt(new Date()) // 签发时间.withExpiresAt(new Date(System.currentTimeMillis() + EXPIRATION_MS)) // 过期时间.sign(ALGORITHM); // 签名}// 验证并解析 Tokenpublic static String verifyToken(String token) {DecodedJWT jwt = JWT.require(ALGORITHM).build().verify(token); // 自动验证过期时间和签名return jwt.getSubject(); // 返回用户名}
}

3. 使用示例

在登录接口中生成 Token:

@RestController
@RequestMapping("/api/auth")
public class AuthController {@PostMapping("/login")public ResponseEntity<?> login(@RequestBody LoginRequest request) {// 1. 验证用户名密码(此处省略具体逻辑)// 2. 生成 TokenString token = JwtUtil.generateToken(request.getUsername());// 3. 返回 Tokenreturn ResponseEntity.ok().body(Collections.singletonMap("token", token));}
}

4. 关键点说明

密钥配置
  • 密钥长度:HMAC256 算法要求密钥至少 256 位(32 字节)。如果密钥不足,会抛出异常。
  • 安全存储:建议将密钥存储在环境变量或配置文件中(如 application.yml):
    jwt:secret: YourSecretKeyHere1234567890expiration-ms: 3600000
    
Token 验证

在需要验证 Token 的接口(如过滤器)中调用 verifyToken 方法:

public class JwtFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) {String token = request.getHeader("Authorization");if (token != null && token.startsWith("Bearer ")) {token = token.substring(7);try {String username = JwtUtil.verifyToken(token);// 将用户信息存入 SecurityContext} catch (Exception e) {response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Invalid Token");}}chain.doFilter(request, response);}
}

5. 整合 Spring Security

若项目中使用了 Spring Security,需配置过滤器和放行规则:

@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.csrf().disable().authorizeRequests().antMatchers("/api/auth/login").permitAll() // 放行登录接口.anyRequest().authenticated().and().addFilterBefore(new JwtFilter(), UsernamePasswordAuthenticationFilter.class);return http.build();}
}

6. 注意事项

  1. 密钥安全:不要硬编码密钥,建议通过 @Value 从配置文件注入:
    @Value("${jwt.secret}")
    private String secret;
    
  2. Token 传输:通过 HTTPS 传输 Token,避免中间人攻击。
  3. 注销机制:JWT 无状态,若需实现注销,可通过以下方式:
    • 短期 Token + 刷新 Token 机制。
    • 维护服务端 Token 黑名单(需额外存储)。
  4. 异常处理:捕获 JWTVerificationException 处理过期或非法 Token。

7. 测试 Token

生成 Token 后,可通过 JWT.io 解码验证内容,或使用 curl 测试接口:

curl -X POST http://localhost:8080/api/auth/login \-H "Content-Type: application/json" \-d '{"username": "user", "password": "password"}'

响应示例:

{"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyIiwiaWF0IjoxNjkzMjYwMDAwLCJleHAiOjE2OTMyNjM2MDB9.abcdef1234567890"
}

通过以上步骤,即可在 Spring Boot 中基于 java-jwt 4.4.0 实现 JWT 的生成与验证。

http://www.xdnf.cn/news/3084.html

相关文章:

  • 特殊权限管理
  • Linux命令使用记录(自用)
  • LS-Linux-004 误删 Python 和 yum、dnf 后的恢复步骤
  • neurips2025_latex
  • Python3(16) 函数
  • 安卓基础(无障碍点击)
  • 通用人工智能(AGI)的技术演进
  • 新人销售如何找精准客户?
  • 语言特性的发展与应用:从基础到前沿的全面解析
  • 25年第八本【活着】
  • 基于STM32、HAL库的DS28E25安全验证及加密芯片驱动程序设计
  • 一些常用的深度学习可视化平台:TensorBoard、Weights Biases (wandb)、VisualDL
  • C++ 原子操作的内存序(memory ordering)
  • ptpx常用操作
  • 企业选择IT技术人员外包能解决哪些问题
  • 【Axure高保真原型】动态地图路线
  • 三维引擎HOOPS SDK适配Linux ARM64,对国产工业软件意味着什么?
  • 深入剖析扩散模型对镜子反射理解局限:MirrorVerse 项目改进数据集与训练方法以提升反射处理表现的研究
  • 基于STM32、HAL库的ATECC608A安全验证及加密芯片驱动程序设计
  • LDO中反向二极管作用
  • 【每天一个知识点】GPU(图形处理单元)和CPU(中央处理单元)
  • Java—— 四道算法经典题
  • jthread是否可以完全取代thread?
  • 共享货源系统,多商户独立站助力行业资源整合
  • 掌握 Linux 中 SELinux 的强制访问控制机制和 iptables、 firewalld 两种防火墙以及他们的使用方法
  • 双系统,bios默认设置启动ubuntu+ubuntu改启动grub设置
  • 学习在暑假避免躺平和内卷(马井堂)
  • FlexNoC随手记
  • 双差分探头法精准测量共模电压的技术解析
  • g4f api报错:ImportError: cannot import name ‘model_validator‘ from ‘pydantic‘