feat(security): 更新 JWT 密钥并改进加密方式
- 更新 JWT 密钥为一个足够长的 Base64 编码密钥,满足 HS512 的要求 - 修改 JwtTokenUtil 类,使用 Keys.hmacShaKeyFor 生成密钥 - 优化 token 解析和生成过程,使用 parserBuilder 设置密钥 refactor(category): 重构分类组件并优化分类选择逻辑 - 移除原有的分类层级结构,改为使用树形结构 - 优化分类选择界面,使用级联选择器- 重构分类相关的数据结构和方法,提高可维护性 fix(application.yml): 优化配置文件格式 - 更新 JWT 密钥配置,确保密钥长度符合要求
This commit is contained in:
@@ -3,10 +3,14 @@ package com.test.bijihoudaun.util;
|
||||
import io.jsonwebtoken.Claims;
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import io.jsonwebtoken.SignatureAlgorithm;
|
||||
import io.jsonwebtoken.security.Keys;
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.Key;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@@ -21,6 +25,13 @@ public class JwtTokenUtil {
|
||||
@Value("${jwt.expiration}")
|
||||
private Long expiration;
|
||||
|
||||
private Key key;
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
this.key = Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8));
|
||||
}
|
||||
|
||||
// 从token中获取用户名
|
||||
public String getUsernameFromToken(String token) {
|
||||
return getClaimFromToken(token, Claims::getSubject);
|
||||
@@ -38,7 +49,7 @@ public class JwtTokenUtil {
|
||||
|
||||
// 为了从token中获取任何信息,我们都需要密钥
|
||||
private Claims getAllClaimsFromToken(String token) {
|
||||
return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
|
||||
return Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody();
|
||||
}
|
||||
|
||||
// 检查token是否过期
|
||||
@@ -57,7 +68,7 @@ public class JwtTokenUtil {
|
||||
private String doGenerateToken(Map<String, Object> claims, String subject) {
|
||||
return Jwts.builder().setClaims(claims).setSubject(subject).setIssuedAt(new Date(System.currentTimeMillis()))
|
||||
.setExpiration(new Date(System.currentTimeMillis() + expiration * 1000))
|
||||
.signWith(SignatureAlgorithm.HS512, secret).compact();
|
||||
.signWith(key, SignatureAlgorithm.HS512).compact();
|
||||
}
|
||||
|
||||
// 验证token
|
||||
|
||||
Reference in New Issue
Block a user