From 78eb3c8ebad6f9667fa040e55bde37499afb48dd Mon Sep 17 00:00:00 2001 From: liu Date: Thu, 27 Jun 2024 10:02:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=99=BB=E5=BD=95=E6=B5=81?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../knowsub/controller/TestController.java | 18 +++++++++ .../knowsub/config/JwtInterceptor.java | 34 ++++++++--------- .../knowsub/config/ThreadCache.java | 30 --------------- .../supervision/knowsub/util/UserUtil.java | 38 +++++++++++++------ 4 files changed, 62 insertions(+), 58 deletions(-) create mode 100644 know_sub_business/src/main/java/com/supervision/knowsub/controller/TestController.java delete mode 100644 know_sub_common/src/main/java/com/supervision/knowsub/config/ThreadCache.java diff --git a/know_sub_business/src/main/java/com/supervision/knowsub/controller/TestController.java b/know_sub_business/src/main/java/com/supervision/knowsub/controller/TestController.java new file mode 100644 index 0000000..5e9aef5 --- /dev/null +++ b/know_sub_business/src/main/java/com/supervision/knowsub/controller/TestController.java @@ -0,0 +1,18 @@ +package com.supervision.knowsub.controller; + +import com.supervision.knowsub.domain.UserInfo; +import com.supervision.knowsub.util.UserUtil; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("test") +public class TestController { + + @GetMapping("testToken") + public void testToken(){ + UserInfo user = UserUtil.getUser(); + + } +} diff --git a/know_sub_common/src/main/java/com/supervision/knowsub/config/JwtInterceptor.java b/know_sub_common/src/main/java/com/supervision/knowsub/config/JwtInterceptor.java index 78bb7e5..36c3aed 100644 --- a/know_sub_common/src/main/java/com/supervision/knowsub/config/JwtInterceptor.java +++ b/know_sub_common/src/main/java/com/supervision/knowsub/config/JwtInterceptor.java @@ -11,8 +11,11 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotNull; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.http.HttpStatus; import org.springframework.lang.Nullable; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.servlet.HandlerInterceptor; import java.util.HashMap; @@ -25,7 +28,6 @@ public class JwtInterceptor implements HandlerInterceptor { } - @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { //请求消息头获取用户ID @@ -34,7 +36,8 @@ public class JwtInterceptor implements HandlerInterceptor { // 如果是swagger来的接口,说明这里是测试的,会伪造一个用户 String referer = request.getHeader("Referer"); if (StrUtil.isNotBlank(referer) && StrUtil.contains(referer, "doc.html")) { - cacheAuth(JWTUtil.parseToken(devActiveUser())); +// cacheAuth(JWTUtil.parseToken(devActiveUser())); + setTokenToRequestHolder(devActiveUser()); return true; } else { throw new BusinessException("当前用户未登录", HttpStatus.UNAUTHORIZED.value()); @@ -43,16 +46,22 @@ public class JwtInterceptor implements HandlerInterceptor { JWT jwt = JWTUtil.parseToken(token); // 校验token是否过期,如果过期了,需要提示过期重新登录 checkTokenExpire(jwt); - cacheAuth(jwt); + // cacheAuth(jwt); return true; } + private void setTokenToRequestHolder(String token) { + ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + if (ObjectUtils.isEmpty(requestAttributes)) { + throw new BusinessException("未获取到用户信息"); + } + requestAttributes.setAttribute("token", token, 0); + } + @Override public void afterCompletion(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull Object handler, @Nullable Exception ex) throws Exception { - // 请求结束,将用户信息从thread中移除 - clearAuth(); HandlerInterceptor.super.afterCompletion(request, response, handler, ex); } @@ -68,24 +77,15 @@ public class JwtInterceptor implements HandlerInterceptor { } - private void cacheAuth(JWT jwt) { - try { - JSONObject claimsJson = jwt.getPayload().getClaimsJson(); - ThreadCache.USER.set(claimsJson.toString()); - } catch (Exception e) { - log.error("用户信息异常", e); - } - } private String devActiveUser() { Map map = new HashMap<>(); map.put("id", "1"); map.put("account", "test"); - map.put("name", "测试"); + map.put("username", "测试"); + map.put("deptId", "1"); + map.put("roleId", "1"); return TokenUtil.creatToken(JSONUtil.toJsonStr(map)); } - private void clearAuth() { - ThreadCache.USER.remove(); - } } diff --git a/know_sub_common/src/main/java/com/supervision/knowsub/config/ThreadCache.java b/know_sub_common/src/main/java/com/supervision/knowsub/config/ThreadCache.java deleted file mode 100644 index 1b58cc3..0000000 --- a/know_sub_common/src/main/java/com/supervision/knowsub/config/ThreadCache.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 文 件 名: ThreadCache - * 版 权: - * 描 述: <描述> - * 修 改 人: RedName - * 修改时间: 2023/9/4 - * 跟踪单号: <跟踪单号> - * 修改单号: <修改单号> - * 修改内容: <修改内容> - */ -package com.supervision.knowsub.config; - - -/** - * <功能详细描述> - * - * @author ljt - * @version [版本号, 2023/9/4] - * @see [相关类/方法] - * @since [产品/模块版本] - */ -public class ThreadCache { - - /** - * 用户ID - */ - public static final ThreadLocal USER = new ThreadLocal<>(); - - -} diff --git a/know_sub_common/src/main/java/com/supervision/knowsub/util/UserUtil.java b/know_sub_common/src/main/java/com/supervision/knowsub/util/UserUtil.java index 08c02bb..0f830ad 100644 --- a/know_sub_common/src/main/java/com/supervision/knowsub/util/UserUtil.java +++ b/know_sub_common/src/main/java/com/supervision/knowsub/util/UserUtil.java @@ -1,29 +1,45 @@ package com.supervision.knowsub.util; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.supervision.knowsub.config.ThreadCache; +import cn.hutool.jwt.JWT; +import cn.hutool.jwt.JWTUtil; import com.supervision.knowsub.domain.UserInfo; import com.supervision.knowsub.exception.BusinessException; -import lombok.Data; +import jakarta.servlet.http.HttpServletRequest; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; public class UserUtil { - public static UserInfo getUser(){ - String userStr = ThreadCache.USER.get(); - UserInfo bean = JSONUtil.toBean(userStr, UserInfo.class); - if (ObjectUtil.isEmpty(bean)){ + public static UserInfo getUser() { + ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + if (ObjectUtils.isEmpty(requestAttributes)) { + throw new BusinessException("未获取到用户信息"); + } + HttpServletRequest request = requestAttributes.getRequest(); + + String token = request.getHeader("token"); + if (StrUtil.isBlank(token)) { + token = (String) request.getAttribute("token"); + + } + JWT jwt = JWTUtil.parseToken(token); + JSONObject claimsJson = jwt.getPayload().getClaimsJson(); + // String userStr = ThreadCache.USER.get(); + UserInfo bean = JSONUtil.toBean(claimsJson.toString(), UserInfo.class); + if (ObjectUtil.isEmpty(bean)) { throw new BusinessException("未获取到用户信息"); } return bean; } - public static String getUserToken(){ - return ThreadCache.USER.get(); - } - public static boolean checkUserPassword(String password,String userPd){ - return SM2Util.verify(password,userPd); + public static boolean checkUserPassword(String password, String userPd) { + return SM2Util.verify(password, userPd); } }