|
@@ -0,0 +1,63 @@
|
|
|
+package com.backendsys.modules.system.interceptor;
|
|
|
+
|
|
|
+import cn.hutool.core.convert.Convert;
|
|
|
+import com.backendsys.aspect.HttpRequestAspect;
|
|
|
+import com.backendsys.config.Security.service.TokenService;
|
|
|
+import com.backendsys.modules.system.annotation.LoginUserId;
|
|
|
+import io.jsonwebtoken.Claims;
|
|
|
+import jakarta.servlet.http.HttpServletRequest;
|
|
|
+import jakarta.servlet.http.HttpServletResponse;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.web.method.HandlerMethod;
|
|
|
+import org.springframework.web.servlet.HandlerInterceptor;
|
|
|
+import java.lang.reflect.Parameter;
|
|
|
+
|
|
|
+@Component
|
|
|
+public class LoginUserInterceptor implements HandlerInterceptor {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TokenService tokenService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
|
+ if (handler instanceof HandlerMethod) {
|
|
|
+ HandlerMethod handlerMethod = (HandlerMethod) handler;
|
|
|
+ Parameter[] parameters = handlerMethod.getMethod().getParameters();
|
|
|
+ for (Parameter parameter : parameters) {
|
|
|
+ if (parameter.isAnnotationPresent(LoginUserId.class)) {
|
|
|
+ // 这里假设你有一个方法可以获取当前登录用户的ID
|
|
|
+ Long userId = getCurrentUserLoginUserId(request);
|
|
|
+ if (userId != null) {
|
|
|
+ // 将登录用户的ID注入到参数中
|
|
|
+ // 注意:这里只是一个示例,实际上你不能直接修改方法参数的值
|
|
|
+ // 你需要通过其他方式来传递这个值,例如使用RequestAttribute
|
|
|
+ request.setAttribute("login_user_id", userId);
|
|
|
+
|
|
|
+ System.out.println("preHandle login_user_id: " + userId);
|
|
|
+
|
|
|
+// // 将登录用户的ID注入到方法参数中
|
|
|
+// handlerMethod.getMethod().invoke(handlerMethod.getBean(), userId);
|
|
|
+
|
|
|
+ }
|
|
|
+ break; // 假设只有一个参数需要被注解
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Long getCurrentUserLoginUserId(HttpServletRequest request) {
|
|
|
+ if (request != null) {
|
|
|
+ Claims tokenInfo = tokenService.getTokenInfo(request);
|
|
|
+ System.out.println("tokenInfo:");
|
|
|
+ System.out.println(tokenInfo);
|
|
|
+ if (tokenInfo != null) {
|
|
|
+ System.out.println("tokenInfo user_id: " + Convert.toLong(tokenInfo.get("user_id")));
|
|
|
+ return Convert.toLong(tokenInfo.get("user_id"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|