diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java index f9c4fcca5..b76414623 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java @@ -16,6 +16,8 @@ import com.ruoyi.system.service.ISysLogininforService; import com.ruoyi.system.service.ISysOperLogService; import eu.bitwalker.useragentutils.UserAgent; +import javax.servlet.http.HttpServletRequest; + /** * 异步工厂(产生任务用) * @@ -24,6 +26,7 @@ import eu.bitwalker.useragentutils.UserAgent; public class AsyncFactory { private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user"); + public static final ThreadLocal REQUEST_THREAD_LOCAL = ThreadLocal.withInitial(ServletUtils::getRequest); /** * 记录登录信息 @@ -37,8 +40,14 @@ public class AsyncFactory public static TimerTask recordLogininfor(final String username, final String status, final String message, final Object... args) { - final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); - final String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + final HttpServletRequest request = REQUEST_THREAD_LOCAL.get(); + + final String header = request.getHeader("User-Agent"); + final UserAgent userAgent = UserAgent.parseUserAgentString(header); + final String ip = IpUtils.getIpAddr(request); + + REQUEST_THREAD_LOCAL.remove(); + return new TimerTask() { @Override diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java index 1d5b1f9c6..11368a231 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java @@ -46,6 +46,7 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler // 删除用户缓存记录 tokenService.delLoginUser(loginUser.getToken()); // 记录用户退出日志 + AsyncFactory.REQUEST_THREAD_LOCAL.set(request); AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "退出成功")); } ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(HttpStatus.SUCCESS, "退出成功")));