diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index df396c2..a77d95e 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,14 +5,10 @@
-
-
-
-
-
-
+
+
@@ -43,8 +39,12 @@
"Maven.springbootmybatis [clean].executor": "Run",
"Maven.springbootmybatis [compile].executor": "Run",
"ModuleVcsDetector.initialDetectionPerformed": "true",
+ "RequestMappingsPanelOrder0": "0",
+ "RequestMappingsPanelOrder1": "1",
+ "RequestMappingsPanelWidth0": "75",
+ "RequestMappingsPanelWidth1": "75",
"RunOnceActivity.ShowReadmeOnStart": "true",
- "Spring Boot.DemoApplication.executor": "Run",
+ "Spring Boot.DemoApplication.executor": "Debug",
"git-widget-placeholder": "main",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
@@ -58,6 +58,9 @@
"vue.rearranger.settings.migration": "true"
}
}]]>
+
+
+
@@ -84,7 +87,7 @@
1754560710248
-
+
@@ -102,7 +105,15 @@
1754562853375
-
+
+
+ 1754565249597
+
+
+
+ 1754565249597
+
+
@@ -112,6 +123,17 @@
+
+
+
+
+ file://$PROJECT_DIR$/src/main/java/com/hivekion/common/filter/JwtAuthenticationFilter.java
+ 83
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index f6bab1e..b0186d0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -137,8 +137,20 @@
io.jsonwebtoken
- jjwt
- 0.9.1
+ jjwt-api
+ 0.11.5
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ 0.11.5
+ runtime
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ 0.11.5
+ runtime
diff --git a/src/main/java/com/hivekion/common/filter/JwtAuthenticationFilter.java b/src/main/java/com/hivekion/common/filter/JwtAuthenticationFilter.java
index f21e666..6591f4a 100644
--- a/src/main/java/com/hivekion/common/filter/JwtAuthenticationFilter.java
+++ b/src/main/java/com/hivekion/common/filter/JwtAuthenticationFilter.java
@@ -87,7 +87,7 @@ public class JwtAuthenticationFilter extends BasicAuthenticationFilter {
}
try {
String userName = JwtTokenUtils.getUsernameFromToken(token);
- log.info("");
+
if (StringUtils.isNotBlank(userName)) {
Object obj = redisUtil.getUsernameByToken(token);
if (obj == null) {
diff --git a/src/main/java/com/hivekion/common/security/JwtTokenUtils.java b/src/main/java/com/hivekion/common/security/JwtTokenUtils.java
index dd2c9e1..e9a243c 100644
--- a/src/main/java/com/hivekion/common/security/JwtTokenUtils.java
+++ b/src/main/java/com/hivekion/common/security/JwtTokenUtils.java
@@ -2,26 +2,15 @@ package com.hivekion.common.security;
import com.hivekion.common.entity.vo.LoginUser;
import com.hivekion.common.exception.BusinessException;
-import com.hivekion.system.service.ISysUserService;
-import io.jsonwebtoken.Claims;
-import io.jsonwebtoken.Jwts;
-import io.jsonwebtoken.SignatureAlgorithm;
-import org.springframework.beans.factory.annotation.Autowired;
+import io.jsonwebtoken.*;
+import io.jsonwebtoken.security.Keys;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
-
import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
+import java.nio.charset.StandardCharsets;
+import java.security.Key;
+import java.util.*;
-/**
- * JWT工具类
- *
- * @author Louis
- * @date Jun 29, 2019
- */
public class JwtTokenUtils {
public static final String TOKEN_PREFIX = "Bearer "; // 前缀
@@ -31,15 +20,20 @@ public class JwtTokenUtils {
private static final String USERID = Claims.ID; // 用户ID
private static final String CREATED = "created"; // 创建时间
private static final String AUTHORITIES = "authorities"; // 权限列表
- private static final String SECRET = "1q2w3E*"; // 密钥
- private static final long EXPIRE_TIME = 2 * 60 * 60 * 1000; // 有效期2小时
- @Autowired
- ISysUserService userService;
+
+ // 密钥长度必须大于等于 64 字节
+ private static final String SECRET = "this_is_a_very_long_secret_key_for_hs512_algorithm_1234567890!@#$%^&*()_+abcd";
+ private static final long EXPIRE_TIME = 24 * 60 * 60 * 1000; // 有效期24小时
+
+
+
+ // 新增统一的 Key 获取方法
+ private static Key getKey() {
+ return Keys.hmacShaKeyFor(SECRET.getBytes(StandardCharsets.UTF_8));
+ }
/**
* 生成令牌
- *
- * @return 令牌
*/
public static String generateToken(Authentication authentication) {
Map claims = new HashMap<>(3);
@@ -49,32 +43,26 @@ public class JwtTokenUtils {
Date expirationDate = new Date(System.currentTimeMillis() + EXPIRE_TIME);
return Jwts.builder()
- .setClaims(claims) //
- .setExpiration(expirationDate) // 过期时间
- .signWith(SignatureAlgorithm.HS512, SECRET)
- .compact();
+ .setClaims(claims)
+ .setExpiration(expirationDate)
+ .signWith(getKey(), SignatureAlgorithm.HS512)
+ .compact();
}
/**
* 从数据声明生成令牌
- *
- * @param claims 数据声明
- * @return 令牌
*/
private static String generateToken(Map claims) {
Date expirationDate = new Date(System.currentTimeMillis() + EXPIRE_TIME);
return Jwts.builder()
- .setClaims(claims) //
- .setExpiration(expirationDate) // 过期时间
- .signWith(SignatureAlgorithm.HS512, SECRET)
- .compact();
+ .setClaims(claims)
+ .setExpiration(expirationDate)
+ .signWith(getKey(), SignatureAlgorithm.HS512)
+ .compact();
}
/**
* 从令牌中获取用户名
- *
- * @param token 令牌
- * @return 用户名
*/
public static String getUsernameFromToken(String token) {
String username;
@@ -89,8 +77,6 @@ public class JwtTokenUtils {
/**
* 根据请求令牌获取登录认证信息
- *
- * @return 用户名
*/
public static Authentication getAuthenticationeFromToken(HttpServletRequest request) {
Authentication authentication = null;
@@ -114,12 +100,12 @@ public class JwtTokenUtils {
Object authors = claims.get(AUTHORITIES); // 权限列表
LoginUser user = new LoginUser();
authentication =
- new UsernamePasswordAuthenticationToken(user, null, new ArrayList<>());
+ new UsernamePasswordAuthenticationToken(user, null, new ArrayList<>());
} else {
if (validateToken(token, SecurityUtils.getUsername())) {
authentication =
- SecurityUtils
- .getAuthentication(); // 如果上下文中Authentication非空,且请求令牌合法,直接返回当前登录认证信息
+ SecurityUtils
+ .getAuthentication(); // 如果上下文中Authentication非空,且请求令牌合法,直接返回当前登录认证信息
}
}
}
@@ -128,14 +114,16 @@ public class JwtTokenUtils {
/**
* 从令牌中获取数据声明
- *
- * @param token 令牌
- * @return 数据声明
*/
private static Claims getClaimsFromToken(String token) {
Claims claims;
try {
- claims = Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token).getBody();
+ // 这里用新版API
+ claims = Jwts.parserBuilder()
+ .setSigningKey(getKey())
+ .build()
+ .parseClaimsJws(token)
+ .getBody();
} catch (Exception e) {
claims = null;
}
@@ -144,21 +132,14 @@ public class JwtTokenUtils {
/**
* 验证令牌
- *
- * @param token
- * @param username
- * @return
*/
public static Boolean validateToken(String token, String username) {
String userName = getUsernameFromToken(token);
- return (userName.equals(username) && !isTokenExpired(token));
+ return (userName != null && userName.equals(username) && !isTokenExpired(token));
}
/**
* 刷新令牌
- *
- * @param token
- * @return
*/
public static String refreshToken(String token) {
String refreshedToken;
@@ -174,9 +155,6 @@ public class JwtTokenUtils {
/**
* 判断令牌是否过期
- *
- * @param token 令牌
- * @return 是否过期
*/
public static Boolean isTokenExpired(String token) {
try {
@@ -190,9 +168,6 @@ public class JwtTokenUtils {
/**
* 获取请求token
- *
- * @param request
- * @return
*/
public static String getToken(HttpServletRequest request) {
String token = request.getHeader("Authorization");
@@ -208,4 +183,4 @@ public class JwtTokenUtils {
}
return token;
}
-}
+}
\ No newline at end of file