Index: forgon-core/src/main/java/com/forgon/security/model/User.java =================================================================== diff -u -r40318 -r40748 --- forgon-core/src/main/java/com/forgon/security/model/User.java (.../User.java) (revision 40318) +++ forgon-core/src/main/java/com/forgon/security/model/User.java (.../User.java) (revision 40748) @@ -38,6 +38,7 @@ import com.forgon.directory.model.OrgUnit; import com.forgon.directory.model.OrgUserRelation; import com.forgon.tools.Constants; +import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.string.StringTools; import com.forgon.tools.util.ConfigUtils; @@ -100,6 +101,11 @@ private String dept; /**密码*/ private String passwd = "1"; + /** + * 最近一次修改密码时间 + * QYSRMYY-76 + */ + private Date lastModifyPasswdTime; /**邮箱*/ private String email; /**手机号码*/ @@ -902,6 +908,14 @@ this.thirdPartyAcountID = thirdPartyAcountID; } + public Date getLastModifyPasswdTime() { + return lastModifyPasswdTime; + } + + public void setLastModifyPasswdTime(Date lastModifyPasswdTime) { + this.lastModifyPasswdTime = lastModifyPasswdTime; + } + /** * 简易转换成json对象 * @return @@ -914,5 +928,17 @@ json.put("currentOrgUnitCode", currentOrgUnitCode); return json; } + + /** + * 修改密码 + * @param newPassword 新密码 + */ + public void modifyPassword(String newPassword) { + if(DatabaseUtil.isPoIdValid(this.id) && !StringUtils.equals(newPassword, this.passwd)){ + //修改密码后,重置密码修改时间 + this.lastModifyPasswdTime = new Date(); + } + this.setPasswd(newPassword); + } } Index: ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/SysUserManagerImpl.java =================================================================== diff -u -r40543 -r40748 --- ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/SysUserManagerImpl.java (.../SysUserManagerImpl.java) (revision 40543) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/SysUserManagerImpl.java (.../SysUserManagerImpl.java) (revision 40748) @@ -1804,4 +1804,46 @@ this.disableOrEnableUser(ENABLE_USER, user, sync); } + @Override + public boolean userPasswdIsExpired(User user, Date loginDate) { + boolean enablePeriodicLoginPasswordChange = ConfigUtils.getSystemSetConfigByNameBool("enablePeriodicLoginPasswordChange"); + if(!enablePeriodicLoginPasswordChange){ + //没开启配置项,不需要检查密码是否过期 + return false; + } + if(user == null || loginDate == null){ + throw new RuntimeException("参数异常!"); + } + SupplyRoomConfig systemParamsObj = supplyRoomConfigManager.getSystemParamsObj(); + if(systemParamsObj == null){ + throw new RuntimeException("科室供应室设置不存在!"); + } + Date userPasswordResetLimitDate = systemParamsObj.getUserPasswordResetLimitDate(); + Long userPasswordResetCycle = systemParamsObj.getUserPasswordResetCycle(); + if(userPasswordResetLimitDate == null || userPasswordResetCycle == null || userPasswordResetCycle.intValue() <= 0){ + //没设置“密码重置周期(天)” + return false; + } + //按照自然日来计算天数 + loginDate = DateTools.startOfDate(loginDate); + Date lastModifyPasswdTime = user.getLastModifyPasswdTime(); + //用户修改密码的时间在设置“密码重置周期(天)”时间之后 + if(lastModifyPasswdTime != null && lastModifyPasswdTime.after(DateTools.addDate(userPasswordResetLimitDate, -userPasswordResetCycle))){ + lastModifyPasswdTime = DateTools.startOfDate(lastModifyPasswdTime); + //下次修改密码的最后时间 + Date nextModifyPasswdLimitTime = DateTools.addDate(lastModifyPasswdTime, userPasswordResetCycle); + if(nextModifyPasswdLimitTime.before(loginDate)){ + //当前时间已经超过了下次修改密码的最后时间,密码过期 + return true; + } + }else{ + userPasswordResetLimitDate = DateTools.startOfDate(userPasswordResetLimitDate); + if(userPasswordResetLimitDate.before(loginDate)){ + //当前时间已经超过了下次修改密码的最后时间,密码过期 + return true; + } + } + return false; + } + } Index: forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java =================================================================== diff -u -r40543 -r40748 --- forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java (.../UserManagerImpl.java) (revision 40543) +++ forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java (.../UserManagerImpl.java) (revision 40748) @@ -210,6 +210,7 @@ if (StringUtils.isNotEmpty(password)) { String newPasswd = CoderEncryption.encryptMD5ForSpringSecurity(password); addLogAndModifyPwdRecord(user,newPasswd); + user.modifyPassword(newPasswd); user.setPasswd(newPasswd); } user.setSpelling(GB2Alpha.string2Alpha(user.getFullName())); Index: ssts-web/src/test/java/test/forgon/directory/service/SysUserManagerTest.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/directory/service/SysUserManagerTest.java (revision 0) +++ ssts-web/src/test/java/test/forgon/directory/service/SysUserManagerTest.java (revision 40748) @@ -0,0 +1,74 @@ +package test.forgon.directory.service; + +import java.util.Date; + +import org.junit.Test; +import org.testng.AssertJUnit; + +import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; +import com.forgon.security.model.User; +import com.forgon.tools.date.DateTools; +import com.forgon.tools.util.ConfigUtils; + +import test.forgon.disinfectsystem.AbstractCSSDTest; + +/** + * SysUserManager的测试 + */ +public class SysUserManagerTest extends AbstractCSSDTest { + + @Test + public void testUserPasswdIsExpired(){ + boolean enablePeriodicLoginPasswordChange = ConfigUtils.getSystemSetConfigByNameBool("enablePeriodicLoginPasswordChange"); + if(!enablePeriodicLoginPasswordChange){ + //没开启配置项,不允许单元测试 + return; + } + //在2025-08-20 10:00:00 设置了“用户密码重置周期(天)”=3天, + SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager.getSystemParamsObj(); + supplyRoomConfig.setUserPasswordResetCycle(3L); + supplyRoomConfig.setUserPasswordResetLimitDate(DateTools.coverStrToDate("2025-08-23 10:00:00", DateTools.COMMON_DATE_HMS)); + //用户没有修改过密码,在2025-08-24 00:00:00及之后时间登录,密码过期 + User user1 = new User(); + user1.setLastModifyPasswdTime(null); + //用户在2025-08-21 15:00:00登录,密码还没过期 + Date loginDate11 = DateTools.coverStrToDate("2025-08-21 15:00:00", DateTools.COMMON_DATE_HMS); + boolean userPasswdIsExpired11 = sysUserManager.userPasswdIsExpired(user1, loginDate11); + AssertJUnit.assertEquals(userPasswdIsExpired11, false); + //用户在2025-08-24 00:00:00登录,密码过期 + Date loginDate12 = DateTools.coverStrToDate("2025-08-24 00:00:00", DateTools.COMMON_DATE_HMS); + boolean userPasswdIsExpired12 = sysUserManager.userPasswdIsExpired(user1, loginDate12); + AssertJUnit.assertEquals(userPasswdIsExpired12, true); + + //用户密码修改时间是2025-08-16 15:00:00在设置密码重置周期之前,在2025-08-24 00:00:00及之后时间登录,密码过期 + User user2 = new User(); + user2.setLastModifyPasswdTime(DateTools.coverStrToDate("2025-08-16 15:00:00", DateTools.COMMON_DATE_HMS)); + //用户在2025-08-21 10:00:00登录,密码还没过期 + Date loginDate21 = DateTools.coverStrToDate("2025-08-21 15:00:00", DateTools.COMMON_DATE_HMS); + boolean userPasswdIsExpired21 = sysUserManager.userPasswdIsExpired(user2, loginDate21); + AssertJUnit.assertEquals(userPasswdIsExpired21, false); + //用户在2025-08-24 00:00:00登录,密码过期 + Date loginDate22 = DateTools.coverStrToDate("2025-08-24 00:00:00", DateTools.COMMON_DATE_HMS); + boolean userPasswdIsExpired2 = sysUserManager.userPasswdIsExpired(user2, loginDate22); + AssertJUnit.assertEquals(userPasswdIsExpired2, true); + + //用户密码修改时间是2025-08-22 15:00:00在设置密码重置周期之后,在2025-08-26 00:00:00及之后时间登录,密码过期 + User user3 = new User(); + user3.setLastModifyPasswdTime(DateTools.coverStrToDate("2025-08-22 15:00:00", DateTools.COMMON_DATE_HMS)); + //用户在2025-08-24 10:00:00登录,密码还没过期 + Date loginDate31 = DateTools.coverStrToDate("2025-08-24 15:00:00", DateTools.COMMON_DATE_HMS); + boolean userPasswdIsExpired31 = sysUserManager.userPasswdIsExpired(user3, loginDate31); + AssertJUnit.assertEquals(userPasswdIsExpired31, false); + //用户在2025-08-26 00:00:00登录,密码过期 + Date loginDate33 = DateTools.coverStrToDate("2025-08-26 00:00:00", DateTools.COMMON_DATE_HMS); + boolean userPasswdIsExpired33 = sysUserManager.userPasswdIsExpired(user3, loginDate33); + AssertJUnit.assertEquals(userPasswdIsExpired33, true); + + + //清除设置 + supplyRoomConfig.setUserPasswordResetCycle(null); + supplyRoomConfig.setUserPasswordResetLimitDate(null); + + } + +} Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java =================================================================== diff -u -r40680 -r40748 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 40680) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 40748) @@ -742,6 +742,10 @@ if(!userManager.forceUserChangePwdWhenNotMeetPwdComplexityReq(user.getName(), barcode, null)){ return JSONUtil.buildErrorMsgJsonResult("密码不符合复杂度要求,请在PC端登录修改为符合要求的密码后再进行登录!"); } + //新增强制用户定期修改登录密码功能QYSRMYY-76 + if(sysUserManager.userPasswdIsExpired(user, new Date())){ + return JSONUtil.buildErrorMsgJsonResult("当前用户密码已经超过时限,请到PC端修改密码。"); + } return userToJson2(user); } Index: ssts-web/src/test/java/test/forgon/directory/service/OrgUnitPatientAreaRelationManagerTest.java =================================================================== diff -u -r40716 -r40748 --- ssts-web/src/test/java/test/forgon/directory/service/OrgUnitPatientAreaRelationManagerTest.java (.../OrgUnitPatientAreaRelationManagerTest.java) (revision 40716) +++ ssts-web/src/test/java/test/forgon/directory/service/OrgUnitPatientAreaRelationManagerTest.java (.../OrgUnitPatientAreaRelationManagerTest.java) (revision 40748) @@ -12,10 +12,8 @@ import com.forgon.directory.model.OrgUnit; import com.forgon.directory.model.OrgUnitPatientAreaRelation; -import com.forgon.directory.service.OrgUnitManager; import com.forgon.directory.vo.OrgUnitPatientAreaRelationVo; import com.forgon.disinfectsystem.basedatamanager.orgunitpatientarearelation.service.OrgUnitPatientAreaRelationManager; -import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; import com.forgon.entity.PageEntity; import com.forgon.systemsetting.model.HttpOption; @@ -35,14 +33,8 @@ private OrgUnitPatientAreaRelationManager orgUnitPatientAreaRelationManager; @Autowired - private OrgUnitManager orgUnitManager; - - @Autowired private HttpOptionManager httpOptionManager; - @Autowired - private SupplyRoomConfigManager supplyRoomConfigManager; - /** * 申请科室(测试内科) */ Index: ssts-web/src/main/java/com/forgon/disinfectsystem/security/userdetails/DaoUserDetailSSTSImpl.java =================================================================== diff -u -r40641 -r40748 --- ssts-web/src/main/java/com/forgon/disinfectsystem/security/userdetails/DaoUserDetailSSTSImpl.java (.../DaoUserDetailSSTSImpl.java) (revision 40641) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/security/userdetails/DaoUserDetailSSTSImpl.java (.../DaoUserDetailSSTSImpl.java) (revision 40748) @@ -355,6 +355,17 @@ throw new DisabledException("密码不符合复杂度要求,或者用户首次登录,请修改为符合要求的密码后再进行登录!"); } + //新增强制用户定期修改登录密码功能QYSRMYY-76 + if(sysUserManager.userPasswdIsExpired(currentLoginedUser, now)){ + logger.error("用户"+ username + "密码已经过期,请修改密码后再进行登录!"); + if(request != null){ + request.getSession().setAttribute("message", messageCommon); + } + //记录ip登录失败记录(GZSZYY-119【登录管理】新增多个登录功能改进(ip登录失败锁定次数,验证码刷新规则修改)) + recordLoginFailIp(request); + throw new DisabledException("密码已经过期,请修改密码后再进行登录!"); + } + userManager.insertUserLogonRecord(userLogonRecord); //如果密码一致,则清除该用户的锁定截止时间字段的值 currentLoginedUser.setLockEndDate(null); Index: forgon-core/src/main/java/com/forgon/directory/service/SysUserManager.java =================================================================== diff -u -r40543 -r40748 --- forgon-core/src/main/java/com/forgon/directory/service/SysUserManager.java (.../SysUserManager.java) (revision 40543) +++ forgon-core/src/main/java/com/forgon/directory/service/SysUserManager.java (.../SysUserManager.java) (revision 40748) @@ -1,6 +1,7 @@ package com.forgon.directory.service; import java.io.OutputStream; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -149,4 +150,12 @@ * @param sync 是否第三方同步的用户 */ public void enableUser(User user, boolean sync); + + /** + * 检查用户的密码是否已经过期QYSRMYY-76 + * @param user 用户 + * @param loginDate 登录时间 + * @return true=密码过期;false=密码没过期 + */ + public boolean userPasswdIsExpired(User user, Date loginDate); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/supplyroomconfig/action/SupplyRoomConfigAction.java =================================================================== diff -u -r40730 -r40748 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/supplyroomconfig/action/SupplyRoomConfigAction.java (.../SupplyRoomConfigAction.java) (revision 40730) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/supplyroomconfig/action/SupplyRoomConfigAction.java (.../SupplyRoomConfigAction.java) (revision 40748) @@ -1434,6 +1434,39 @@ supplyRoomConfig.setNoOptionCleanMethodSolution(noOptionCleanMethodSolution); } } + + //启用定期修改登录密码功能QYSRMYY-76 + boolean enablePeriodicLoginPasswordChange = ConfigUtils.getSystemSetConfigByNameBool("enablePeriodicLoginPasswordChange"); + if(enablePeriodicLoginPasswordChange){ + String userPasswordResetCycleStr = rq.getParameter("userPasswordResetCycle"); + if(StringUtils.isNotBlank(userPasswordResetCycleStr)){ + Long userPasswordResetCycle = null; + try { + userPasswordResetCycle = Long.valueOf(userPasswordResetCycleStr); + } catch (Exception e) {} + if(userPasswordResetCycle == null || userPasswordResetCycle < 0){ + //“密码重置周期(天)”无效 + StrutsResponseUtils.output(false, "“密码重置周期(天)”仅允许填写0和正整数"); + return; + } + if(userPasswordResetCycle.intValue() == 0){ + //“密码重置周期(天)”设置为0 + supplyRoomConfig.setUserPasswordResetLimitDate(null); + supplyRoomConfig.setUserPasswordResetCycle(userPasswordResetCycle); + }else{ + if(!MathTools.equals(userPasswordResetCycle, supplyRoomConfig.getUserPasswordResetCycle())){ + //修改“密码重置周期(天)” + Date userPasswordResetLimitDate = DateTools.addDate(new Date(), userPasswordResetCycle); + supplyRoomConfig.setUserPasswordResetLimitDate(userPasswordResetLimitDate); + supplyRoomConfig.setUserPasswordResetCycle(userPasswordResetCycle); + } + } + }else{ + //“密码重置周期(天)”为空白 + supplyRoomConfig.setUserPasswordResetCycle(null); + supplyRoomConfig.setUserPasswordResetLimitDate(null); + } + } supplyRoomConfigManager.save(supplyRoomConfig); Index: ssts-web/src/test/java/test/forgon/directory/AllTests.java =================================================================== diff -u -r40716 -r40748 --- ssts-web/src/test/java/test/forgon/directory/AllTests.java (.../AllTests.java) (revision 40716) +++ ssts-web/src/test/java/test/forgon/directory/AllTests.java (.../AllTests.java) (revision 40748) @@ -6,14 +6,15 @@ import test.forgon.directory.service.OrgUnitManagerTest; import test.forgon.directory.service.OrgUnitPatientAreaRelationManagerTest; +import test.forgon.directory.service.SysUserManagerTest; /** * * @author Terry Kwan * 2019-04-05 * */ @RunWith(Suite.class) -@SuiteClasses({ OrgUnitManagerTest.class, OrgUnitPatientAreaRelationManagerTest.class }) +@SuiteClasses({ OrgUnitManagerTest.class, OrgUnitPatientAreaRelationManagerTest.class, SysUserManagerTest.class }) public class AllTests { } Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/stdxyxyfszlyy/OrgUserDataWebServiceManagerImpl.java =================================================================== diff -u -r27573 -r40748 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/stdxyxyfszlyy/OrgUserDataWebServiceManagerImpl.java (.../OrgUserDataWebServiceManagerImpl.java) (revision 27573) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/stdxyxyfszlyy/OrgUserDataWebServiceManagerImpl.java (.../OrgUserDataWebServiceManagerImpl.java) (revision 40748) @@ -25,6 +25,7 @@ import com.forgon.disinfectsystem.datasynchronization.service.DataSynchronizationManager; import com.forgon.log.service.LogManager; import com.forgon.security.model.User; +import com.forgon.security.service.UserManager; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.xml.XMLUtil; @@ -93,6 +94,9 @@ @Autowired private ObjectDao objectDao; + + @Autowired + private UserManager userManager; @Override @WebMethod @@ -233,6 +237,8 @@ //汕头大学医学院附属肿瘤医院(STDXYXYFSZ-8):密码字段的值是经过了MD5加密的32个字符的字符串, //可以直接写入到用户表的对应密码字段 if(StringUtils.isNotBlank(vo.getPasswd())){ + userManager.addLogAndModifyPwdRecord(user, vo.getPasswd()); + user.modifyPassword(vo.getPasswd()); user.setPasswd(vo.getPasswd()); objectDao.saveOrUpdate(user); } Index: forgon-core/src/main/java/com/forgon/security/action/UserAction.java =================================================================== diff -u -r40637 -r40748 --- forgon-core/src/main/java/com/forgon/security/action/UserAction.java (.../UserAction.java) (revision 40637) +++ forgon-core/src/main/java/com/forgon/security/action/UserAction.java (.../UserAction.java) (revision 40748) @@ -1,5 +1,6 @@ package com.forgon.security.action; +import java.util.Date; import java.util.Set; import javax.servlet.http.HttpServletRequest; @@ -16,6 +17,7 @@ import org.apache.struts2.convention.annotation.ParentPackage; import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.service.SysUserManager; import com.forgon.directory.vo.LoginUserData; import com.forgon.security.model.User; import com.forgon.security.service.UserManager; @@ -42,12 +44,18 @@ private User user; private UserManager userManager; + private SysUserManager sysUserManager; + private Logger logger = Logger.getLogger(getClass()); public void setUserManager(UserManager userManager) { this.userManager = userManager; } + public void setSysUserManager(SysUserManager sysUserManager) { + this.sysUserManager = sysUserManager; + } + /** * 根据用户id判断是否已经修改密码,或者密码复杂度是否符合 * meetPwdComplexity: true:符合复杂度要求,不需要修改密码;用户名和密码异常; @@ -58,7 +66,11 @@ StrutsParamUtils.getResponse().setCharacterEncoding("utf8"); String password = StrutsParamUtils.getPraramValue("password", ""); String userName = StrutsParamUtils.getPraramValue("userName", ""); + //密码是否满足复杂度 Boolean meetPwdComplexity = true; + //密码是否过期 + boolean passwdIsExpired = false; + JSONObject result = new JSONObject(); try { if(StringUtils.isBlank(userName) || StringUtils.isBlank(password)){ throw new RuntimeException("用户名或密码不能为空!"); @@ -85,11 +97,14 @@ if(forceUserChangePwdWhenNotMeetPwdComplexityReq){ meetPwdComplexity = userManager.forceUserChangePwdWhenNotMeetPwdComplexityReq(user.getName(), j_useNameAfterRsaDecrypt, j_passwordAfterRsaDecrypt); } + passwdIsExpired = sysUserManager.userPasswdIsExpired(user, new Date()); } } catch (Exception e) { e.printStackTrace(); } - StrutsResponseUtils.output(meetPwdComplexity); + result.put("meetPwdComplexity", meetPwdComplexity); + result.put("passwdIsExpired", passwdIsExpired); + StrutsResponseUtils.output(result); } public void loadUsersBySearchString() { Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/supplyroomconfig/SupplyRoomConfig.java =================================================================== diff -u -r40730 -r40748 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/supplyroomconfig/SupplyRoomConfig.java (.../SupplyRoomConfig.java) (revision 40730) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/supplyroomconfig/SupplyRoomConfig.java (.../SupplyRoomConfig.java) (revision 40748) @@ -4,6 +4,7 @@ package com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig; import java.math.BigDecimal; +import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; @@ -717,6 +718,20 @@ private String verifyPasswordWhenNewUser = Constants.STR_YES; /** + * 用户密码重置周期(天) + * QYSRMYY-76 + */ + private Long userPasswordResetCycle; + + /** + * 用户重置密码的最后日期 + * 每次用户修改了“用户密码重置周期(天)”后,都会重新计算 + * 用户重置密码的最后日期 = 当前时间 + 用户密码重置周期(天) + * QYSRMYY-76 + */ + private Date userPasswordResetLimitDate; + + /** * 退货显示一次性物品过期批次 * “退货显示一次性物品过期批次”GZFDZL-141 */ @@ -1898,4 +1913,20 @@ public void setSyncReturnRecipientInfo(String syncReturnRecipientInfo) { this.syncReturnRecipientInfo = syncReturnRecipientInfo; } + + public Long getUserPasswordResetCycle() { + return userPasswordResetCycle; + } + + public void setUserPasswordResetCycle(Long userPasswordResetCycle) { + this.userPasswordResetCycle = userPasswordResetCycle; + } + + public Date getUserPasswordResetLimitDate() { + return userPasswordResetLimitDate; + } + + public void setUserPasswordResetLimitDate(Date userPasswordResetLimitDate) { + this.userPasswordResetLimitDate = userPasswordResetLimitDate; + } }