Просмотр исходного кода

fix: 登录失败时 SysLogAspect 调用 StpUtil.getSession() 抛出异常覆盖原始响应

登录接口带有 @SysLog 注解,失败时 StpUtil.login() 未被调用,但切面在
joinPoint.proceed() 后调用 StpUtil.getSession() 读取用户信息写日志,
此时无登录会话导致 NotLoginException,被全局异常处理器捕获后返回
"未能读取到有效token",覆盖了原本的"用户名或密码错误"。

修复:调用 getSession() 前先检查 StpUtil.isLogin()。

Co-Authored-By: Claude <noreply@anthropic.com>
skyline 1 месяц назад
Родитель
Сommit
f79efbf24e
1 измененных файлов с 6 добавлено и 4 удалено
  1. 6 4
      car-wash-admin/src/main/java/com/kym/admin/aspect/SysLogAspect.java

+ 6 - 4
car-wash-admin/src/main/java/com/kym/admin/aspect/SysLogAspect.java

@@ -84,10 +84,12 @@ public class SysLogAspect {
         HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
         HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
         //设置IP地址
         //设置IP地址
         systemLog.setIp(IPUtils.getIpAddr(request));
         systemLog.setIp(IPUtils.getIpAddr(request));
-        //用户名、公司id、后台用户id
-        systemLog.setUserId(StpUtil.getSession().getLong("userId"));
-        systemLog.setCompanyId(StpUtil.getSession().getLong("companyId"));
-        systemLog.setUsername(StpUtil.getSession().getString("mobilePhone"));
+        //用户名、公司id、后台用户id(登录失败时无会话,跳过)
+        if (StpUtil.isLogin()) {
+            systemLog.setUserId(StpUtil.getSession().getLong("userId"));
+            systemLog.setCompanyId(StpUtil.getSession().getLong("companyId"));
+            systemLog.setUsername(StpUtil.getSession().getString("mobilePhone"));
+        }
         systemLog.setExecuteTime(executeTime);
         systemLog.setExecuteTime(executeTime);
 
 
         //保存系统日志
         //保存系统日志