From 3928388c82e637cbef7199e7d302caa494721fb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=87=92=E4=BA=BA=E4=B8=8E=E7=8C=AB?= Date: Wed, 28 Feb 2024 07:14:04 +0000 Subject: [PATCH 1/5] =?UTF-8?q?update=20src/main/java/com/youlai/system/co?= =?UTF-8?q?nfig/WebSocketConfig.java.=20=E4=BD=BF=E7=94=A8=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0websocket=E7=9A=84=E6=97=B6=E5=80=99=EF=BC=8C=E5=8F=91?= =?UTF-8?q?=E7=8E=B0=E5=90=8E=E5=8F=B0=E4=B8=80=E7=9B=B4=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E6=8B=BF=E5=88=B0=E7=94=A8=E6=88=B7=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=EF=BC=8C=E6=89=BE=E5=88=B0=E4=B8=80=E5=A4=84=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 懒人与猫 --- src/main/java/com/youlai/system/config/WebSocketConfig.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/youlai/system/config/WebSocketConfig.java b/src/main/java/com/youlai/system/config/WebSocketConfig.java index 75f8ed21..254fcd39 100644 --- a/src/main/java/com/youlai/system/config/WebSocketConfig.java +++ b/src/main/java/com/youlai/system/config/WebSocketConfig.java @@ -79,7 +79,10 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { if (StrUtil.isNotBlank(bearerToken) && bearerToken.startsWith("Bearer ")) { try { // 移除 "Bearer " 前缀,从令牌中提取用户信息(username), 并设置到认证信息中 - String username = JwtUtils.parseToken(bearerToken).get("name").toString(); + + // 这里不应该用"name" + // String username = JwtUtils.parseToken(bearerToken).get("name").toString(); + String username = JwtUtils.parseToken(bearerToken).get(JWTPayload.SUBJECT).toString(); if (StrUtil.isNotBlank(username)) { accessor.setUser(() -> username); From 033350266988d1b86e83ddd136a37d1ab3956906 Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Sat, 9 Mar 2024 00:00:04 +0800 Subject: [PATCH 2/5] =?UTF-8?q?style:=20=E4=BC=98=E5=8C=96=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../youlai/system/security/util/JwtUtils.java | 52 ++++++++++--------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/youlai/system/security/util/JwtUtils.java b/src/main/java/com/youlai/system/security/util/JwtUtils.java index ca8fb2f4..447e1dc3 100644 --- a/src/main/java/com/youlai/system/security/util/JwtUtils.java +++ b/src/main/java/com/youlai/system/security/util/JwtUtils.java @@ -52,9 +52,7 @@ public class JwtUtils { } /** - * 创建Token - *

- * 认证成功后的用户信息会被封装到 Authentication 对象中,然后通过 JwtTokenProvider#createToken(Authentication) 方法创建 Token 字符串 + * 生成 JWT Token * * @param authentication 用户认证信息 * @return Token 字符串 @@ -85,11 +83,35 @@ public class JwtUtils { return JWTUtil.createToken(payload, JwtUtils.key); } + /** - * 从 Token 中解析数据 + * 从 JWT Token 中解析 Authentication 用户认证信息 + * + * @param payload JWT 载体 + * @return 用户认证信息 + */ + public static UsernamePasswordAuthenticationToken getAuthentication(Map payload) { + SysUserDetails userDetails = new SysUserDetails(); + userDetails.setUserId(Convert.toLong(payload.get(JwtClaimConstants.USER_ID))); // 用户ID + userDetails.setDeptId(Convert.toLong(payload.get(JwtClaimConstants.DEPT_ID))); // 部门ID + userDetails.setDataScope(Convert.toInt(payload.get(JwtClaimConstants.DATA_SCOPE))); // 数据权限范围 + + userDetails.setUsername(Convert.toStr(payload.get(JWTPayload.SUBJECT))); // 用户名 + // 角色集合 + Set authorities = ((JSONArray) payload.get(JwtClaimConstants.AUTHORITIES)) + .stream() + .map(authority -> new SimpleGrantedAuthority(Convert.toStr(authority))) + .collect(Collectors.toSet()); + + return new UsernamePasswordAuthenticationToken(userDetails, "", authorities); + } + + + /** + * 解析 JWT Token 获取载体信息 * * @param token JWT Token - * @return 解析数据 + * @return 载体信息 */ public static Map parseToken(String token) { try { @@ -110,25 +132,5 @@ public class JwtUtils { return null; } - /** - * 从 Token 中获取 Authentication - * - * @param payload - * @return - */ - public static UsernamePasswordAuthenticationToken getAuthentication(Map payload) { - SysUserDetails userDetails = new SysUserDetails(); - userDetails.setUserId(Convert.toLong(payload.get(JwtClaimConstants.USER_ID))); // 用户ID - userDetails.setDeptId(Convert.toLong(payload.get(JwtClaimConstants.DEPT_ID))); // 部门ID - userDetails.setDataScope(Convert.toInt(payload.get(JwtClaimConstants.DATA_SCOPE))); // 数据权限范围 - userDetails.setUsername(Convert.toStr(payload.get(JWTPayload.SUBJECT))); // 用户名 - // 角色集合 - Set authorities = ((JSONArray) payload.get(JwtClaimConstants.AUTHORITIES)) - .stream() - .map(authority -> new SimpleGrantedAuthority(Convert.toStr(authority))) - .collect(Collectors.toSet()); - - return new UsernamePasswordAuthenticationToken(userDetails, "", authorities); - } } From 1affb04996d2f063caeb0005ea25bc70d0eddc8c Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Sat, 9 Mar 2024 00:01:17 +0800 Subject: [PATCH 3/5] =?UTF-8?q?build(pom.xml):=20=E5=8D=87=E7=BA=A7=20Spri?= =?UTF-8?q?ngBoot=20=E7=89=88=E6=9C=AC=E8=87=B3=20`3.2.3`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index df652241..73ec181c 100644 --- a/pom.xml +++ b/pom.xml @@ -6,13 +6,13 @@ com.youlai youlai-boot - 2.6.1 + 2.6.2 基于 Java 17 + SpringBoot 3 + Spring Security 构建的权限管理系统。 org.springframework.boot spring-boot-starter-parent - 3.2.2 + 3.2.3 From ad12cca6fdeb9aef9b1761ad1ac7894194d653ea Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Sat, 9 Mar 2024 00:07:20 +0800 Subject: [PATCH 4/5] =?UTF-8?q?fix(WebSocketConfig.java):=20=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E7=BC=BA=E5=A4=B1=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/youlai/system/config/WebSocketConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/youlai/system/config/WebSocketConfig.java b/src/main/java/com/youlai/system/config/WebSocketConfig.java index 254fcd39..fdf86e20 100644 --- a/src/main/java/com/youlai/system/config/WebSocketConfig.java +++ b/src/main/java/com/youlai/system/config/WebSocketConfig.java @@ -1,6 +1,7 @@ package com.youlai.system.config; import cn.hutool.core.util.StrUtil; +import cn.hutool.jwt.JWTPayload; import com.youlai.system.security.util.JwtUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; From 58d30d56caca0ac5ca81a0771a1d96cbc135488d Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Sat, 9 Mar 2024 00:10:36 +0800 Subject: [PATCH 5/5] =?UTF-8?q?docs(README.md):=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b1b79660..dee2b480 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

有来技术 - 有来技术 + 有来技术 有来技术