From a5c3ca482f39ad26d5e2b991a2d7013038f4441d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=AD=9F?= <3111696955@qq.com> Date: Thu, 31 Jul 2025 11:15:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(security):=20=E6=9B=B4=E6=96=B0=20JWT=20?= =?UTF-8?q?=E5=AF=86=E9=92=A5=E5=B9=B6=E6=94=B9=E8=BF=9B=E5=8A=A0=E5=AF=86?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新 JWT 密钥为一个足够长的 Base64 编码密钥,满足 HS512 的要求 - 修改 JwtTokenUtil 类,使用 Keys.hmacShaKeyFor 生成密钥 - 优化 token 解析和生成过程,使用 parserBuilder 设置密钥 refactor(category): 重构分类组件并优化分类选择逻辑 - 移除原有的分类层级结构,改为使用树形结构 - 优化分类选择界面,使用级联选择器- 重构分类相关的数据结构和方法,提高可维护性 fix(application.yml): 优化配置文件格式 - 更新 JWT 密钥配置,确保密钥长度符合要求 --- .../test/bijihoudaun/util/JwtTokenUtil.java | 15 +- .../src/main/resources/application.yml | 2 +- biji-qianduan/src/components/HomePage.vue | 251 ++++++++---------- mydatabase.db | Bin 36864 -> 36864 bytes 4 files changed, 125 insertions(+), 143 deletions(-) diff --git a/biji-houdaun/src/main/java/com/test/bijihoudaun/util/JwtTokenUtil.java b/biji-houdaun/src/main/java/com/test/bijihoudaun/util/JwtTokenUtil.java index 5701c04..f56b329 100644 --- a/biji-houdaun/src/main/java/com/test/bijihoudaun/util/JwtTokenUtil.java +++ b/biji-houdaun/src/main/java/com/test/bijihoudaun/util/JwtTokenUtil.java @@ -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 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 diff --git a/biji-houdaun/src/main/resources/application.yml b/biji-houdaun/src/main/resources/application.yml index c256703..e85a973 100644 --- a/biji-houdaun/src/main/resources/application.yml +++ b/biji-houdaun/src/main/resources/application.yml @@ -32,7 +32,7 @@ mybatis-plus: # JWT 配置 jwt: - secret: mysecretkeymysecretkeymysecretkeymysecretkeymysecretkey # 至少256位的密钥 + secret: V2VsbCwgSSBzdXBwb3NlIHRoYXQgaWYgeW91J3JlIHJlYWRpbmcgdGhpcywgeW91J3JlIHByZXR0eSBjdXJpb3VzLg== # 这是一个足够长的Base64编码密钥,满足HS512的要求 expiration: 86400 # token有效期,单位秒,这里是24小时 header: Authorization # JWT存储的请求头 tokenHead: "Bearer " # JWT负载中拿到开头 diff --git a/biji-qianduan/src/components/HomePage.vue b/biji-qianduan/src/components/HomePage.vue index e58ce94..8cfdf44 100644 --- a/biji-qianduan/src/components/HomePage.vue +++ b/biji-qianduan/src/components/HomePage.vue @@ -22,25 +22,10 @@ popper-effect="light" :collapse-transition="false" > - - - - - - {{ sub.grouping }} - - + + @@ -117,21 +102,15 @@ - - - 一级分类 - 二级分类 - - - - - - + + @@ -149,25 +128,15 @@ - - - - - - - - +