Java JWT工具类核心是生成与校验Token,需用JJWT 0.12+、SecretKey密钥、HS256签名,支持自定义声明,严格校验签名与时效性,异常不捕获,密钥应动态加载且禁止硬编码。

Java 中封装 JWT 鉴权校验工具类,核心是围绕“生成 Token”和“解析验证 Token”两个动作,配合安全密钥、过期时间、自定义声明等关键要素。重点不在堆代码,而在结构清晰、密钥安全、异常可控、便于集成。
明确工具类职责与依赖
JWT 工具类不处理用户查询或密码比对,只专注令牌的生成与校验。它应是无状态、无业务耦合的纯工具。
- 推荐使用 JJWT 0.12.x+(当前主流,替代已停更的 0.10.x);Maven 依赖需包含
jjwt-api、jjwt-impl、jjwt-jackson - 密钥必须用
SecretKey类型(而非字符串直接传入),避免硬编码;建议从配置中心或环境变量加载原始密钥字符串后动态构建 - 签名算法优先选
HS256(简单高效),若需非对称则用RS256+ 公私钥对
封装生成 Token 的方法
生成时要注入必要声明(subject、issuedAt、expiration),支持扩展角色、用户 ID、租户等字段。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用
Jwts.builder()构建,设置setSubject()(如用户名)、setIssuedAt()、setExpiration() - 通过
.claim("role", "ADMIN")或.claims(claimsMap)添加自定义数据 - 调用
signWith(key, HS256)签名,最后.compact()得到完整 JWT 字符串 - 示例中有效期建议设为 30 分钟~2 小时,避免长期有效带来的风险
封装解析与校验 Token 的方法
校验不是“只解码”,而是完整验证签名有效性、时效性、签发者等——失败必须抛出明确异常。
立即学习“Java免费学习笔记(深入)”;
- 用
Jwts.parserBuilder().setSigningKey(key).build()构建解析器 - 调用
parseClaimsJws(token):自动检查签名、过期(ExpiredJwtException)、篡改(SignatureException)、格式错误(MalformedJwtException)等 - 成功后取
.getBody()获取Claims对象,可安全读取getSubject()、get("role", String.class)等 - 不建议在工具类里捕获所有异常并返回 null——应让上层(如拦截器)统一处理鉴权失败逻辑
配套建议:密钥管理与使用姿势
工具类本身不解决密钥安全问题,但设计上要为安全留出接口。
- 密钥初始化建议放在
@PostConstruct方法或 Spring Bean 初始化阶段,避免每次调用都重建 - 若项目用 Spring Boot,可将密钥字符串存在
application.yml中,并用@Value("${jwt.secret}")注入,再转成SecretKey - 生产环境禁用默认密钥(如
"your-secret-key"),可用命令行生成强随机密钥:openssl rand -base64 32 - Token 应仅通过
Authorization: Bearer xxx请求头传递,禁止放 URL 或 body 中

















