From 0832f385234a8a2f3b69a5c3fc1e1c95e3c4849e Mon Sep 17 00:00:00 2001 From: zjh <1084500556@qq.com> Date: 星期一, 09 六月 2025 17:48:20 +0800 Subject: [PATCH] zjh20250609 --- ltkj-framework/src/main/java/com/ltkj/framework/manager/factory/AsyncFactory.java | 80 +++++++++++++++++++++++--- ltkj-common/src/main/java/com/ltkj/common/constant/CacheConstants.java | 3 + ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysLoginService.java | 31 +++++++-- ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysPasswordService.java | 12 ++- ltkj-framework/src/main/java/com/ltkj/framework/aspectj/LogAspect.java | 3 ltkj-framework/src/main/java/com/ltkj/framework/security/handle/LogoutSuccessHandlerImpl.java | 17 +++++ ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysLoginController.java | 2 ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysRegisterService.java | 2 ltkj-framework/src/main/java/com/ltkj/framework/web/service/TokenService.java | 3 9 files changed, 125 insertions(+), 28 deletions(-) diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysLoginController.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysLoginController.java index 5a0ea1f..17c60a4 100644 --- a/ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysLoginController.java +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysLoginController.java @@ -100,7 +100,7 @@ if (loginBody.getMobile()) { token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getType(), loginBody.getCode(), loginBody.getUuid(),hospId); } else { - token = loginService.Cuslogin(loginBody.getUsername(),loginBody.getSfzh(),loginBody.getPassword(), loginBody.getType(), loginBody.getCode(), loginBody.getUuid()); + token = loginService.Cuslogin(loginBody.getUsername(),loginBody.getSfzh(),loginBody.getPassword(), loginBody.getType(), loginBody.getCode(), loginBody.getUuid(),hospId); LambdaQueryWrapper<TjCustomer> wq = new LambdaQueryWrapper<>(); wq.eq(TjCustomer::getCusPhone, loginBody.getUsername()); TjCustomer tjCustomer = customerService.getOne(wq); diff --git a/ltkj-common/src/main/java/com/ltkj/common/constant/CacheConstants.java b/ltkj-common/src/main/java/com/ltkj/common/constant/CacheConstants.java index 7b5d8b9..d1358f7 100644 --- a/ltkj-common/src/main/java/com/ltkj/common/constant/CacheConstants.java +++ b/ltkj-common/src/main/java/com/ltkj/common/constant/CacheConstants.java @@ -6,6 +6,9 @@ * @author ltkj */ public class CacheConstants { + + + /** * 鐧诲綍鐢ㄦ埛 redis key */ diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/LogAspect.java b/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/LogAspect.java index d1fcd41..3c04daf 100644 --- a/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/LogAspect.java +++ b/ltkj-framework/src/main/java/com/ltkj/framework/aspectj/LogAspect.java @@ -94,7 +94,8 @@ // 澶勭悊璁剧疆娉ㄨВ涓婄殑鍙傛暟 getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult); // 淇濆瓨鏁版嵁搴� - AsyncManager.me().execute(AsyncFactory.recordOper(operLog)); +// AsyncManager.me().execute(AsyncFactory.recordOper(operLog)); + AsyncFactory.recordOper(operLog); } catch (Exception exp) { // 璁板綍鏈湴寮傚父鏃ュ織 log.error("==鍓嶇疆閫氱煡寮傚父=="); diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/manager/factory/AsyncFactory.java b/ltkj-framework/src/main/java/com/ltkj/framework/manager/factory/AsyncFactory.java index b3652b7..a2bc142 100644 --- a/ltkj-framework/src/main/java/com/ltkj/framework/manager/factory/AsyncFactory.java +++ b/ltkj-framework/src/main/java/com/ltkj/framework/manager/factory/AsyncFactory.java @@ -1,7 +1,14 @@ package com.ltkj.framework.manager.factory; +import java.io.IOException; import java.util.TimerTask; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ltkj.db.DataSourceConfig; +import com.ltkj.db.DataSourceContextHolder; +import com.ltkj.hosp.domain.DictHosp; +import com.ltkj.hosp.service.IDictHospService; +import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ltkj.common.constant.Constants; @@ -16,12 +23,17 @@ import com.ltkj.system.service.ISysLogininforService; import com.ltkj.system.service.ISysOperLogService; import eu.bitwalker.useragentutils.UserAgent; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletResponse; /** * 寮傛宸ュ巶锛堜骇鐢熶换鍔$敤锛� * * @author ltkj */ +//@Component + @Slf4j public class AsyncFactory { private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user"); @@ -34,13 +46,20 @@ * @param args 鍒楄〃 * @return 浠诲姟task */ - public static TimerTask recordLogininfor(final String username, final String status, final String message, + public static TimerTask recordLogininfor(final String username, final String status, final String message,final String hospId, final Object... args) { final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); final String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + +// log.info("闄㈠尯鍙傛暟hospId"+hospId); return new TimerTask() { @Override public void run() { + + log.info("闄㈠尯鍙傛暟hospId"+hospId); + DataSourceContextHolder.setDataSourceKey(hospId); + SpringUtils.getBean(DataSourceConfig.class).addDataSource(hospId); + String address = AddressUtils.getRealAddressByIP(ip); StringBuilder s = new StringBuilder(); s.append(LogUtils.getBlock(ip)); @@ -74,20 +93,61 @@ }; } + + public static void recordLogininfornew(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()); + String address = AddressUtils.getRealAddressByIP(ip); + StringBuilder s = new StringBuilder(); + s.append(LogUtils.getBlock(ip)); + s.append(address); + s.append(LogUtils.getBlock(username)); + s.append(LogUtils.getBlock(status)); + s.append(LogUtils.getBlock(message)); + // 鎵撳嵃淇℃伅鍒版棩蹇� + sys_user_logger.info(s.toString(), args); + // 鑾峰彇瀹㈡埛绔搷浣滅郴缁� + String os = userAgent.getOperatingSystem().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 (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) { + 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 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 void recordOper(final SysOperLog operLog) { + // 杩滅▼鏌ヨ鎿嶄綔鍦扮偣 + operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); + SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog); } } diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/security/handle/LogoutSuccessHandlerImpl.java b/ltkj-framework/src/main/java/com/ltkj/framework/security/handle/LogoutSuccessHandlerImpl.java index 53b6d13..4ad0a69 100644 --- a/ltkj-framework/src/main/java/com/ltkj/framework/security/handle/LogoutSuccessHandlerImpl.java +++ b/ltkj-framework/src/main/java/com/ltkj/framework/security/handle/LogoutSuccessHandlerImpl.java @@ -1,11 +1,16 @@ package com.ltkj.framework.security.handle; import java.io.IOException; +import javax.annotation.Resource; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ltkj.db.DataSourceContextHolder; import com.ltkj.framework.web.service.TokenService; +import com.ltkj.hosp.domain.DictHosp; +import com.ltkj.hosp.service.IDictHospService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.security.core.Authentication; @@ -28,7 +33,8 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler { @Autowired private TokenService tokenService; - + @Resource + private IDictHospService hospService; /** * 閫�鍑哄鐞� * @@ -37,13 +43,20 @@ @Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { + String hospId = request.getHeader("hospId"); + LambdaQueryWrapper<DictHosp> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DictHosp::getCode,hospId); + DictHosp hosp = hospService.getOne(wrapper); + DataSourceContextHolder.setDataSourceKey(hosp.getDbname()); + LoginUser loginUser = tokenService.getLoginUser(request); if (StringUtils.isNotNull(loginUser)) { String userName = loginUser.getUsername(); // 鍒犻櫎鐢ㄦ埛缂撳瓨璁板綍 tokenService.delLoginUser(loginUser.getToken(), loginUser.getUser().getUserId()); // 璁板綍鐢ㄦ埛閫�鍑烘棩蹇� - AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "閫�鍑烘垚鍔�")); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "閫�鍑烘垚鍔�",hosp.getDbname())); +// AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "閫�鍑烘垚鍔�"); } ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.success("閫�鍑烘垚鍔�"))); } diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysLoginService.java b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysLoginService.java index 34d12c4..eba1b92 100644 --- a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysLoginService.java +++ b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysLoginService.java @@ -114,12 +114,14 @@ redisCache.deleteObject(verifyKey); if (captcha == null) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"))); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"),hosp.getDbname())); +// AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); throw new CaptchaExpireException(); } if (!code.equalsIgnoreCase(captcha)) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"))); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"),hosp.getDbname())); +// AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")); throw new CaptchaException(); } } @@ -139,16 +141,21 @@ authentication = authenticationManager.authenticate(authenticationToken); } catch (Exception e) { if (e instanceof BadCredentialsException) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"),hosp.getDbname())); +// AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")); throw new UserPasswordNotMatchException(); } else { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage(),hosp.getDbname())); +// AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()); throw new ServiceException(e.getMessage()); } } finally { AuthenticationContextHolder.clearContext(); } - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); +// AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); +// AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"),hosp.getDbname()); +// AsyncFactory.recordLogininforord(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"),hosp.getDbname()); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"),hosp.getDbname())); LoginUser loginUser = (LoginUser) authentication.getPrincipal(); loginUser.setHospDB(hosp.getDbname()); loginUser.setHospId(hospId); @@ -231,7 +238,14 @@ * @param password 瀵嗙爜 * @return 缁撴灉 */ - public String Cuslogin(String username,String sfzh, String password, Boolean type,String code,String uuid) { + public String Cuslogin(String username,String sfzh, String password, Boolean type,String code,String uuid, String hospId) { + + DataSourceContextHolder.setDataSourceKey(DataSourceType.MASTER.name()); + LambdaQueryWrapper<DictHosp> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DictHosp::getCode,hospId); + DictHosp hosp = hospService.getOne(wrapper); + + DataSourceContextHolder.setDataSourceKey(hosp.getDbname()); String aSwitch = configService.selectConfigByKey("captcha_switch"); if(null !=aSwitch && aSwitch.equalsIgnoreCase("Y")){ @@ -240,12 +254,13 @@ redisCache.deleteObject(verifyKey); if (captcha == null) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"))); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"),hosp.getDbname())); +// AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); throw new CaptchaExpireException(); } if (!code.equalsIgnoreCase(captcha)) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"))); + AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"),hosp.getDbname()); throw new CaptchaException(); } } diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysPasswordService.java b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysPasswordService.java index 8d588fd..1d243ab 100644 --- a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysPasswordService.java +++ b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysPasswordService.java @@ -56,15 +56,19 @@ } if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, - MessageUtils.message("user.password.retry.limit.exceed", maxRetryCount, lockTime))); +// AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, +// MessageUtils.message("user.password.retry.limit.exceed", maxRetryCount, lockTime),null)); + AsyncFactory.recordLogininfornew(username, Constants.LOGIN_FAIL, + MessageUtils.message("user.password.retry.limit.exceed", maxRetryCount, lockTime)); throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime); } if (!matches(user, password)) { retryCount = retryCount + 1; - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, - MessageUtils.message("user.password.retry.limit.count", retryCount))); +// AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, +// MessageUtils.message("user.password.retry.limit.count", retryCount),null)); + AsyncFactory.recordLogininfornew(username, Constants.LOGIN_FAIL, + MessageUtils.message("user.password.retry.limit.count", retryCount)); redisCache.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES); throw new UserPasswordNotMatchException(); } else { diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysRegisterService.java b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysRegisterService.java index f022427..9ac423f 100644 --- a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysRegisterService.java +++ b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/SysRegisterService.java @@ -67,7 +67,7 @@ if (!regFlag) { msg = "娉ㄥ唽澶辫触,璇疯仈绯荤郴缁熺鐞嗕汉鍛�"; } else { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.register.success"))); + AsyncFactory.recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.register.success"), null); } } return msg; diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/TokenService.java b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/TokenService.java index 3c021cd..02769de 100644 --- a/ltkj-framework/src/main/java/com/ltkj/framework/web/service/TokenService.java +++ b/ltkj-framework/src/main/java/com/ltkj/framework/web/service/TokenService.java @@ -219,7 +219,8 @@ } private String getTokenKey(String uuid) { - return CacheConstants.LOGIN_TOKEN_KEY + uuid; + + return CacheConstants.LOGIN_TOKEN_KEY+uuid; } -- Gitblit v1.8.0