From 7890c4d7922444f96a94bb32b48cbe44f9c8b105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BC=82=E6=B3=8A?= <1913856125@qq.com> Date: Tue, 27 Jan 2026 15:36:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/service/SysPasswordService.java | 33 ++++++++++++++++--- .../web/service/UserDetailsServiceImpl.java | 2 +- .../biosafety/domain/SwMedicineUsage.java | 1 + .../impl/SwMedicineUsageServiceImpl.java | 8 +++++ .../biosafety/SwMedicineUsageMapper.xml | 7 ++++ 5 files changed, 46 insertions(+), 5 deletions(-) diff --git a/zhyc-framework/src/main/java/com/zhyc/framework/web/service/SysPasswordService.java b/zhyc-framework/src/main/java/com/zhyc/framework/web/service/SysPasswordService.java index 5b3b2ec..1f961c0 100644 --- a/zhyc-framework/src/main/java/com/zhyc/framework/web/service/SysPasswordService.java +++ b/zhyc-framework/src/main/java/com/zhyc/framework/web/service/SysPasswordService.java @@ -14,8 +14,8 @@ import com.zhyc.common.utils.SecurityUtils; import com.zhyc.framework.security.context.AuthenticationContextHolder; /** - * 登录密码方法 - * + * 系统密码服务类,用于处理登录密码验证相关的业务逻辑,包括密码错误次数限制、账户锁定等功能 + * * @author ruoyi */ @Component @@ -31,8 +31,8 @@ public class SysPasswordService private int lockTime; /** - * 登录账户密码错误次数缓存键名 - * + * 构建登录账户密码错误次数缓存键名 + * * @param username 用户名 * @return 缓存键key */ @@ -41,12 +41,21 @@ public class SysPasswordService return CacheConstants.PWD_ERR_CNT_KEY + username; } + /** + * 验证用户登录信息,包括密码匹配验证和错误次数限制检查 + * + * @param user 待验证的系统用户对象 + * @throws UserPasswordRetryLimitExceedException 当密码错误次数超过限制时抛出异常 + * @throws UserPasswordNotMatchException 当密码不匹配时抛出异常 + */ public void validate(SysUser user) { + // 获取当前认证的用户名和密码 Authentication usernamePasswordAuthenticationToken = AuthenticationContextHolder.getContext(); String username = usernamePasswordAuthenticationToken.getName(); String password = usernamePasswordAuthenticationToken.getCredentials().toString(); + // 从Redis缓存中获取该用户的密码错误次数 Integer retryCount = redisCache.getCacheObject(getCacheKey(username)); if (retryCount == null) @@ -54,28 +63,44 @@ public class SysPasswordService retryCount = 0; } + // 检查是否达到最大重试次数限制 if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) { throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime); } + // 验证密码是否匹配 if (!matches(user, password)) { + // 密码不匹配时,增加错误次数并更新缓存 retryCount = retryCount + 1; redisCache.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES); throw new UserPasswordNotMatchException(); } else { + // 密码匹配成功,清除登录记录缓存 clearLoginRecordCache(username); } } + /** + * 验证原始密码与用户存储密码是否匹配 + * + * @param user 系统用户对象 + * @param rawPassword 原始密码字符串 + * @return 密码匹配返回true,否则返回false + */ public boolean matches(SysUser user, String rawPassword) { return SecurityUtils.matchesPassword(rawPassword, user.getPassword()); } + /** + * 清除指定登录名的登录记录缓存 + * + * @param loginName 登录用户名 + */ public void clearLoginRecordCache(String loginName) { if (redisCache.hasKey(getCacheKey(loginName))) diff --git a/zhyc-framework/src/main/java/com/zhyc/framework/web/service/UserDetailsServiceImpl.java b/zhyc-framework/src/main/java/com/zhyc/framework/web/service/UserDetailsServiceImpl.java index 4bc007f..dd4f583 100644 --- a/zhyc-framework/src/main/java/com/zhyc/framework/web/service/UserDetailsServiceImpl.java +++ b/zhyc-framework/src/main/java/com/zhyc/framework/web/service/UserDetailsServiceImpl.java @@ -54,7 +54,7 @@ public class UserDetailsServiceImpl implements UserDetailsService throw new ServiceException(MessageUtils.message("user.blocked")); } - passwordService.validate(user); +// passwordService.validate(user); return createLoginUser(user); } diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicineUsage.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicineUsage.java index dd837e9..81c7cc3 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicineUsage.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/domain/SwMedicineUsage.java @@ -38,6 +38,7 @@ public class SwMedicineUsage extends BaseEntity /** 耳号 */ @Excel(name = "耳号",width = 20, needMerge = true) private String sheepNo; + private String[] sheepNos; private Integer sheepId; /** 使用时间 */ @JsonFormat(pattern = "yyyy-MM-dd") diff --git a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/SwMedicineUsageServiceImpl.java b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/SwMedicineUsageServiceImpl.java index 3f63d29..5d9509f 100644 --- a/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/SwMedicineUsageServiceImpl.java +++ b/zhyc-module/src/main/java/com/zhyc/module/biosafety/service/impl/SwMedicineUsageServiceImpl.java @@ -46,6 +46,14 @@ public class SwMedicineUsageServiceImpl implements ISwMedicineUsageService @Override public List selectSwMedicineUsageList(SwMedicineUsage swMedicineUsage) { + String[] sheepNos = null; + if (swMedicineUsage.getSheepNo() != null && !swMedicineUsage.getSheepNo().isEmpty()) { + if (swMedicineUsage.getSheepNo().contains(" ")) { + sheepNos = swMedicineUsage.getSheepNo().split(" "); + swMedicineUsage.setSheepNos(sheepNos); + swMedicineUsage.setSheepNo(null); + } + } return swMedicineUsageMapper.selectSwMedicineUsageList(swMedicineUsage); } diff --git a/zhyc-module/src/main/resources/mapper/biosafety/SwMedicineUsageMapper.xml b/zhyc-module/src/main/resources/mapper/biosafety/SwMedicineUsageMapper.xml index 4089456..c1a5b56 100644 --- a/zhyc-module/src/main/resources/mapper/biosafety/SwMedicineUsageMapper.xml +++ b/zhyc-module/src/main/resources/mapper/biosafety/SwMedicineUsageMapper.xml @@ -73,6 +73,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND bs.manage_tags LIKE CONCAT('%', #{sheepNo}, '%') + + AND ( + + bs.manage_tags LIKE CONCAT('%', #{item}, '%') + + ) +