Merge remote-tracking branch 'origin/dev_1.0.0' into dev_1.0.0

release_1.0.0
xueqingkun 8 months ago
commit 19b1e27d19

@ -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();
}
}

@ -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<String, Object> 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();
}
}

@ -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<String> USER = new ThreadLocal<>();
}

@ -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);
}
}

Loading…
Cancel
Save