From 8349e631d2cbef27d2f0c841a37ce499e69ecaff Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期六, 12 六月 2021 20:14:50 +0800
Subject: [PATCH] update 优化 异步工厂重写 使用 spring 异步处理
---
ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java | 54 ++++----
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/AsyncService.java | 96 ++++++++++++++++
/dev/null | 111 ------------------
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java | 20 +-
ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java | 53 ++++----
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java | 8
ruoyi-framework/src/main/java/com/ruoyi/framework/config/AsyncConfig.java | 11 +
7 files changed, 172 insertions(+), 181 deletions(-)
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
index 442d258..280a60c 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
@@ -8,10 +8,8 @@
import com.ruoyi.common.enums.BusinessStatus;
import com.ruoyi.common.enums.HttpMethod;
import com.ruoyi.common.utils.ServletUtils;
-import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
-import com.ruoyi.framework.manager.AsyncManager;
-import com.ruoyi.framework.manager.factory.AsyncFactory;
+import com.ruoyi.framework.web.service.AsyncService;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.domain.SysOperLog;
import org.aspectj.lang.JoinPoint;
@@ -93,7 +91,7 @@
SysOperLog operLog = new SysOperLog();
operLog.setStatus(BusinessStatus.SUCCESS.ordinal());
// 璇锋眰鐨勫湴鍧�
- String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
+ String ip = ServletUtils.getClientIP();
operLog.setOperIp(ip);
// 杩斿洖鍙傛暟
operLog.setJsonResult(JSON.toJSONString(jsonResult));
@@ -118,7 +116,7 @@
// 澶勭悊璁剧疆娉ㄨВ涓婄殑鍙傛暟
getControllerMethodDescription(joinPoint, controllerLog, operLog);
// 淇濆瓨鏁版嵁搴�
- AsyncManager.me().execute(AsyncFactory.recordOper(operLog));
+ SpringUtils.getBean(AsyncService.class).recordOper(operLog);
}
catch (Exception exp)
{
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/AsyncConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/AsyncConfig.java
index 5c11ae6..2eb4eb3 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/AsyncConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/AsyncConfig.java
@@ -2,6 +2,8 @@
import com.ruoyi.common.exception.CustomException;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurerSupport;
import org.springframework.scheduling.annotation.EnableAsync;
@@ -9,7 +11,7 @@
import java.util.Arrays;
import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
/**
* 寮傛閰嶇疆
@@ -20,13 +22,16 @@
@Configuration
public class AsyncConfig extends AsyncConfigurerSupport {
+ @Autowired
+ @Qualifier("scheduledExecutorService")
+ private ScheduledExecutorService scheduledExecutorService;
+
/**
* 寮傛鎵ц闇�瑕佷娇鐢ㄦ潈闄愭鏋惰嚜甯︾殑鍖呰绾跨▼姹� 淇濊瘉鏉冮檺淇℃伅鐨勪紶閫�
*/
@Override
public Executor getAsyncExecutor() {
- return new DelegatingSecurityContextExecutorService(
- Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()));
+ return new DelegatingSecurityContextExecutorService(scheduledExecutorService);
}
/**
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java
deleted file mode 100644
index 7387a02..0000000
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.ruoyi.framework.manager;
-
-import java.util.TimerTask;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-import com.ruoyi.common.utils.Threads;
-import com.ruoyi.common.utils.spring.SpringUtils;
-
-/**
- * 寮傛浠诲姟绠$悊鍣�
- *
- * @author ruoyi
- */
-public class AsyncManager
-{
- /**
- * 鎿嶄綔寤惰繜10姣
- */
- private final int OPERATE_DELAY_TIME = 10;
-
- /**
- * 寮傛鎿嶄綔浠诲姟璋冨害绾跨▼姹�
- */
- private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService");
-
- /**
- * 鍗曚緥妯″紡
- */
- private AsyncManager(){}
-
- private static AsyncManager me = new AsyncManager();
-
- public static AsyncManager me()
- {
- return me;
- }
-
- /**
- * 鎵ц浠诲姟
- *
- * @param task 浠诲姟
- */
- public void execute(TimerTask task)
- {
- executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS);
- }
-
- /**
- * 鍋滄浠诲姟绾跨▼姹�
- */
- public void shutdown()
- {
- Threads.shutdownAndAwaitTermination(executor);
- }
-}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java
index e36ca3c..4ed5366 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java
@@ -1,39 +1,41 @@
package com.ruoyi.framework.manager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import com.ruoyi.common.utils.Threads;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
+
import javax.annotation.PreDestroy;
+import java.util.concurrent.ScheduledExecutorService;
/**
* 纭繚搴旂敤閫�鍑烘椂鑳藉叧闂悗鍙扮嚎绋�
*
- * @author ruoyi
+ * @author Lion Li
*/
+@Slf4j(topic = "sys-user")
@Component
-public class ShutdownManager
-{
- private static final Logger logger = LoggerFactory.getLogger("sys-user");
+public class ShutdownManager {
- @PreDestroy
- public void destroy()
- {
- shutdownAsyncManager();
- }
+ @Autowired
+ @Qualifier("scheduledExecutorService")
+ private ScheduledExecutorService scheduledExecutorService;
- /**
- * 鍋滄寮傛鎵ц浠诲姟
- */
- private void shutdownAsyncManager()
- {
- try
- {
- logger.info("====鍏抽棴鍚庡彴浠诲姟浠诲姟绾跨▼姹�====");
- AsyncManager.me().shutdown();
- }
- catch (Exception e)
- {
- logger.error(e.getMessage(), e);
- }
- }
+ @PreDestroy
+ public void destroy() {
+ shutdownAsyncManager();
+ }
+
+ /**
+ * 鍋滄寮傛鎵ц浠诲姟
+ */
+ private void shutdownAsyncManager() {
+ try {
+ log.info("====鍏抽棴鍚庡彴浠诲姟浠诲姟绾跨▼姹�====");
+ Threads.shutdownAndAwaitTermination(scheduledExecutorService);
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ }
+ }
}
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
deleted file mode 100644
index d0147a2..0000000
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.ruoyi.framework.manager.factory;
-
-import cn.hutool.http.useragent.UserAgent;
-import cn.hutool.http.useragent.UserAgentUtil;
-import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.utils.ServletUtils;
-import com.ruoyi.common.utils.ip.AddressUtils;
-import com.ruoyi.common.utils.ip.IpUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
-import com.ruoyi.system.domain.SysLogininfor;
-import com.ruoyi.system.domain.SysOperLog;
-import com.ruoyi.system.service.ISysLogininforService;
-import com.ruoyi.system.service.ISysOperLogService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.TimerTask;
-
-/**
- * 寮傛宸ュ巶锛堜骇鐢熶换鍔$敤锛�
- *
- * @author ruoyi
- */
-public class AsyncFactory
-{
- private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user");
-
- /**
- * 璁板綍鐧诲綍淇℃伅
- *
- * @param username 鐢ㄦ埛鍚�
- * @param status 鐘舵��
- * @param message 娑堟伅
- * @param args 鍒楄〃
- * @return 浠诲姟task
- */
- public static TimerTask recordLogininfor(final String username, final String status, final String message,
- final Object... args)
- {
- final UserAgent userAgent = UserAgentUtil.parse(ServletUtils.getRequest().getHeader("User-Agent"));
- final String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
- return new TimerTask()
- {
- @Override
- public void run()
- {
- String address = AddressUtils.getRealAddressByIP(ip);
- StringBuilder s = new StringBuilder();
- s.append(getBlock(ip));
- s.append(address);
- s.append(getBlock(username));
- s.append(getBlock(status));
- s.append(getBlock(message));
- // 鎵撳嵃淇℃伅鍒版棩蹇�
- sys_user_logger.info(s.toString(), args);
- // 鑾峰彇瀹㈡埛绔搷浣滅郴缁�
- String os = userAgent.getOs().getName();
- // 鑾峰彇瀹㈡埛绔祻瑙堝櫒
- String browser = userAgent.getBrowser().getName();
- // 灏佽瀵硅薄
- SysLogininfor logininfor = new SysLogininfor();
- logininfor.setUserName(username);
- logininfor.setIpaddr(ip);
- logininfor.setLoginLocation(address);
- logininfor.setBrowser(browser);
- logininfor.setOs(os);
- logininfor.setMsg(message);
- // 鏃ュ織鐘舵��
- if (Constants.LOGIN_SUCCESS.equals(status) || Constants.LOGOUT.equals(status))
- {
- logininfor.setStatus(Constants.SUCCESS);
- }
- else if (Constants.LOGIN_FAIL.equals(status))
- {
- logininfor.setStatus(Constants.FAIL);
- }
- // 鎻掑叆鏁版嵁
- SpringUtils.getBean(ISysLogininforService.class).insertLogininfor(logininfor);
- }
- };
- }
-
- /**
- * 鎿嶄綔鏃ュ織璁板綍
- *
- * @param operLog 鎿嶄綔鏃ュ織淇℃伅
- * @return 浠诲姟task
- */
- public static TimerTask recordOper(final SysOperLog operLog)
- {
- return new TimerTask()
- {
- @Override
- public void run()
- {
- // 杩滅▼鏌ヨ鎿嶄綔鍦扮偣
- operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp()));
- SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog);
- }
- };
- }
-
- public static String getBlock(Object msg)
- {
- if (msg == null)
- {
- msg = "";
- }
- return "[" + msg.toString() + "]";
- }
-}
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 e79f468..3ce2447 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
@@ -7,8 +7,7 @@
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.ServletUtils;
-import com.ruoyi.framework.manager.AsyncManager;
-import com.ruoyi.framework.manager.factory.AsyncFactory;
+import com.ruoyi.framework.web.service.AsyncService;
import com.ruoyi.framework.web.service.TokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
@@ -22,33 +21,33 @@
/**
* 鑷畾涔夐��鍑哄鐞嗙被 杩斿洖鎴愬姛
- *
+ *
* @author ruoyi
*/
@Configuration
-public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler
-{
- @Autowired
- private TokenService tokenService;
+public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler {
- /**
- * 閫�鍑哄鐞�
- *
- * @return
- */
- @Override
- public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
- throws IOException, ServletException
- {
- LoginUser loginUser = tokenService.getLoginUser(request);
- if (Validator.isNotNull(loginUser))
- {
- String userName = loginUser.getUsername();
- // 鍒犻櫎鐢ㄦ埛缂撳瓨璁板綍
- tokenService.delLoginUser(loginUser.getToken());
- // 璁板綍鐢ㄦ埛閫�鍑烘棩蹇�
- AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "閫�鍑烘垚鍔�"));
- }
- ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(HttpStatus.HTTP_OK, "閫�鍑烘垚鍔�")));
- }
+ @Autowired
+ private TokenService tokenService;
+
+ @Autowired
+ private AsyncService asyncService;
+
+ /**
+ * 閫�鍑哄鐞�
+ */
+ @Override
+ public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
+ throws IOException, ServletException {
+ LoginUser loginUser = tokenService.getLoginUser(request);
+ if (Validator.isNotNull(loginUser)) {
+ String userName = loginUser.getUsername();
+ // 鍒犻櫎鐢ㄦ埛缂撳瓨璁板綍
+ tokenService.delLoginUser(loginUser.getToken());
+ // 璁板綍鐢ㄦ埛閫�鍑烘棩蹇�
+ asyncService.recordLogininfor(userName, Constants.LOGOUT, "閫�鍑烘垚鍔�", request);
+ }
+ ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(HttpStatus.HTTP_OK, "閫�鍑烘垚鍔�")));
+ }
+
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/AsyncService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/AsyncService.java
new file mode 100644
index 0000000..e64fbc1
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/AsyncService.java
@@ -0,0 +1,96 @@
+package com.ruoyi.framework.web.service;
+
+import cn.hutool.http.useragent.UserAgent;
+import cn.hutool.http.useragent.UserAgentUtil;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.utils.ServletUtils;
+import com.ruoyi.common.utils.ip.AddressUtils;
+import com.ruoyi.system.domain.SysLogininfor;
+import com.ruoyi.system.domain.SysOperLog;
+import com.ruoyi.system.service.ISysLogininforService;
+import com.ruoyi.system.service.ISysOperLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 寮傛宸ュ巶锛堜骇鐢熶换鍔$敤锛�
+ *
+ * @author Lion Li
+ */
+@Slf4j(topic = "sys-user")
+@Async
+@Component
+public class AsyncService {
+
+ @Autowired
+ private ISysLogininforService iSysLogininforService;
+
+ @Autowired
+ private ISysOperLogService iSysOperLogService;
+
+ /**
+ * 璁板綍鐧诲綍淇℃伅
+ *
+ * @param username 鐢ㄦ埛鍚�
+ * @param status 鐘舵��
+ * @param message 娑堟伅
+ * @param args 鍒楄〃
+ */
+ public void recordLogininfor(final String username, final String status, final String message,
+ HttpServletRequest request, final Object... args) {
+ final UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent"));
+ final String ip = ServletUtils.getClientIP(request);
+
+ String address = AddressUtils.getRealAddressByIP(ip);
+ StringBuilder s = new StringBuilder();
+ s.append(getBlock(ip));
+ s.append(address);
+ s.append(getBlock(username));
+ s.append(getBlock(status));
+ s.append(getBlock(message));
+ // 鎵撳嵃淇℃伅鍒版棩蹇�
+ log.info(s.toString(), args);
+ // 鑾峰彇瀹㈡埛绔搷浣滅郴缁�
+ String os = userAgent.getOs().getName();
+ // 鑾峰彇瀹㈡埛绔祻瑙堝櫒
+ String browser = userAgent.getBrowser().getName();
+ // 灏佽瀵硅薄
+ SysLogininfor logininfor = new SysLogininfor();
+ logininfor.setUserName(username);
+ logininfor.setIpaddr(ip);
+ logininfor.setLoginLocation(address);
+ logininfor.setBrowser(browser);
+ logininfor.setOs(os);
+ logininfor.setMsg(message);
+ // 鏃ュ織鐘舵��
+ if (Constants.LOGIN_SUCCESS.equals(status) || Constants.LOGOUT.equals(status)) {
+ logininfor.setStatus(Constants.SUCCESS);
+ } else if (Constants.LOGIN_FAIL.equals(status)) {
+ logininfor.setStatus(Constants.FAIL);
+ }
+ // 鎻掑叆鏁版嵁
+ iSysLogininforService.insertLogininfor(logininfor);
+ }
+
+ /**
+ * 鎿嶄綔鏃ュ織璁板綍
+ *
+ * @param operLog 鎿嶄綔鏃ュ織淇℃伅
+ */
+ public void recordOper(final SysOperLog operLog) {
+ // 杩滅▼鏌ヨ鎿嶄綔鍦扮偣
+ operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp()));
+ iSysOperLogService.insertOperlog(operLog);
+ }
+
+ private String getBlock(Object msg) {
+ if (msg == null) {
+ msg = "";
+ }
+ return "[" + msg.toString() + "]";
+ }
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
index bc22ca0..d0b9511 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -11,10 +11,7 @@
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.ServletUtils;
-import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.framework.config.properties.CaptchaProperties;
-import com.ruoyi.framework.manager.AsyncManager;
-import com.ruoyi.framework.manager.factory.AsyncFactory;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
@@ -24,6 +21,7 @@
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
/**
* 鐧诲綍鏍¢獙鏂规硶
@@ -48,6 +46,9 @@
@Autowired
private ISysUserService userService;
+ @Autowired
+ private AsyncService asyncService;
+
/**
* 鐧诲綍楠岃瘉
*
@@ -59,16 +60,17 @@
*/
public String login(String username, String password, String code, String uuid)
{
+ HttpServletRequest request = ServletUtils.getRequest();
if(captchaProperties.getEnabled()) {
String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
String captcha = redisCache.getCacheObject(verifyKey);
redisCache.deleteObject(verifyKey);
if (captcha == null) {
- AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
+ asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"), request);
throw new CaptchaExpireException();
}
if (!code.equalsIgnoreCase(captcha)) {
- AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
+ asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"), request);
throw new CaptchaException();
}
}
@@ -84,16 +86,16 @@
{
if (e instanceof BadCredentialsException)
{
- AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+ asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"), request);
throw new UserPasswordNotMatchException();
}
else
{
- AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
+ asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage(), request);
throw new CustomException(e.getMessage());
}
}
- AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+ asyncService.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"), request);
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
recordLoginInfo(loginUser.getUser());
// 鐢熸垚token
@@ -105,7 +107,7 @@
*/
public void recordLoginInfo(SysUser user)
{
- user.setLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
+ user.setLoginIp(ServletUtils.getClientIP());
user.setLoginDate(DateUtils.getNowDate());
user.setUpdateBy(user.getUserName());
userService.updateUserProfile(user);
--
Gitblit v1.9.3