From a2358870aca60abe779ea57c6f0c9133339fdc26 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期四, 11 七月 2024 10:20:11 +0800 Subject: [PATCH] 调整密码过期校验使用登陆时检测 --- /dev/null | 54 --------------------------- src/main/java/com/ycl/jxkg/config/spring/security/RestAuthenticationSuccessHandler.java | 20 +++++++++- src/main/java/com/ycl/jxkg/service/impl/UserServiceImpl.java | 5 ++ src/main/java/com/ycl/jxkg/utils/DateTimeUtil.java | 11 +++++ src/main/java/com/ycl/jxkg/domain/entity/User.java | 6 --- src/main/resources/mapper/UserMapper.xml | 21 ++-------- 6 files changed, 38 insertions(+), 79 deletions(-) diff --git a/src/main/java/com/ycl/jxkg/config/spring/security/RestAuthenticationSuccessHandler.java b/src/main/java/com/ycl/jxkg/config/spring/security/RestAuthenticationSuccessHandler.java index 58df9d5..4d07825 100644 --- a/src/main/java/com/ycl/jxkg/config/spring/security/RestAuthenticationSuccessHandler.java +++ b/src/main/java/com/ycl/jxkg/config/spring/security/RestAuthenticationSuccessHandler.java @@ -1,12 +1,16 @@ package com.ycl.jxkg.config.spring.security; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.ycl.jxkg.base.SystemCode; import com.ycl.jxkg.constants.CaffeineConstant; +import com.ycl.jxkg.domain.entity.SysConfig; import com.ycl.jxkg.domain.entity.UserEventLog; import com.ycl.jxkg.enums.general.YesOrNoEnum; import com.ycl.jxkg.event.UserEvent; +import com.ycl.jxkg.mapper.SysConfigMapper; import com.ycl.jxkg.service.UserService; import com.ycl.jxkg.utils.CaffeineUtil; +import com.ycl.jxkg.utils.DateTimeUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; @@ -14,6 +18,7 @@ import org.springframework.security.core.userdetails.User; import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import javax.servlet.ServletException; @@ -21,6 +26,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Date; +import java.util.List; /** @@ -35,6 +41,7 @@ private final ApplicationEventPublisher eventPublisher; private final UserService userService; private final CaffeineUtil caffeineUtil; + private final SysConfigMapper sysConfigMapper; /** * Instantiates a new Rest authentication success handler. @@ -43,10 +50,11 @@ * @param userService the user service */ @Autowired - public RestAuthenticationSuccessHandler(ApplicationEventPublisher eventPublisher, UserService userService, CaffeineUtil caffeineUtil) { + public RestAuthenticationSuccessHandler(ApplicationEventPublisher eventPublisher, UserService userService, CaffeineUtil caffeineUtil, SysConfigMapper sysConfigMapper) { this.eventPublisher = eventPublisher; this.userService = userService; this.caffeineUtil = caffeineUtil; + this.sysConfigMapper = sysConfigMapper; } @Override @@ -59,11 +67,19 @@ caffeineUtil.put(CaffeineConstant.AUTH, springUser.getUsername(), sessionId); com.ycl.jxkg.domain.entity.User user = userService.getUserByUserName(springUser.getUsername()); if (null != user) { + List<SysConfig> configList = new LambdaQueryChainWrapper<>(sysConfigMapper) + .list(); + Integer passwordExpireDays = 30; + if (configList.size() == 1) { + passwordExpireDays = configList.get(0).getPasswordExpireTime(); + } + Date now = new Date(); // 瀵嗙爜杩囨湡杩斿洖寮哄埗淇敼瀵嗙爜鏍囪瘑 - if (YesOrNoEnum.YES.equals(user.getNeedUpdatePassword())) { + if (DateTimeUtil.getTwoTimeDiffDay(now, user.getLastUpdatePasswordTime()) > passwordExpireDays) { RestUtil.response(response, 205, "瀵嗙爜杩囨湡锛岃淇敼瀵嗙爜", user.getId()); return; } + UserEventLog userEventLog = new UserEventLog(user.getId(), user.getUserName(), user.getRealName(), new Date()); userEventLog.setContent(user.getUserName() + " 鐧诲綍浜嗘睙瑗胯闊宠棰戝煿璁郴缁�"); eventPublisher.publishEvent(new UserEvent(userEventLog)); diff --git a/src/main/java/com/ycl/jxkg/domain/entity/User.java b/src/main/java/com/ycl/jxkg/domain/entity/User.java index 3b827d2..36717a6 100644 --- a/src/main/java/com/ycl/jxkg/domain/entity/User.java +++ b/src/main/java/com/ycl/jxkg/domain/entity/User.java @@ -86,12 +86,6 @@ @TableField("wx_open_id") private String wxOpenId; - @TableField("need_update_password") - /** - * 鏄惁闇�瑕佷慨鏀瑰瘑鐮� - */ - private YesOrNoEnum needUpdatePassword; - @TableField("last_update_password_time") /** * 涓婁竴娆′慨鏀瑰瘑鐮佺殑鏃堕棿 diff --git a/src/main/java/com/ycl/jxkg/job/PasswordExpireJob.java b/src/main/java/com/ycl/jxkg/job/PasswordExpireJob.java deleted file mode 100644 index aa90e5f..0000000 --- a/src/main/java/com/ycl/jxkg/job/PasswordExpireJob.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.ycl.jxkg.job; - -import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; -import com.ycl.jxkg.domain.entity.SysConfig; -import com.ycl.jxkg.mapper.SysConfigMapper; -import com.ycl.jxkg.mapper.UserMapper; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import java.util.Date; -import java.util.List; -import java.util.Objects; - -/** - * 瀵嗙爜杩囨湡澶勭悊 - * - * @author锛歺p - * @date锛�2024/7/10 9:52 - */ -@Slf4j -@Component -@RequiredArgsConstructor -public class PasswordExpireJob { - - private final UserMapper userMapper; - private final SysConfigMapper configMapper; - - /** - * 姣忓ぉ鍑屾櫒鎵ц - * - */ - @Scheduled(cron = "0 0 0 * * ?") - public void passwordExpire() { - List<SysConfig> list = new LambdaQueryChainWrapper<>(configMapper) - .list(); - if (list.size() > 1) { - log.error("绯荤粺閰嶇疆澶т簬1鏉★紝鏃犳硶姝g‘鎵ц銆愬瘑鐮佽繃鏈熴�戜换鍔�"); - return; - } - if (list.size() == 0) { - log.error("涓嶅瓨鍦ㄧ郴缁熼厤缃紝鏃犳硶姝g‘鎵ц銆愬瘑鐮佽繃鏈熴�戜换鍔�"); - return; - } - SysConfig config = list.get(0); - if (Objects.isNull(config.getPasswordExpireTime())) { - // 濡傛灉鏈厤缃瘑鐮佽繃鏈熸椂闂达紝鍒欓粯璁�30澶╁瘑鐮佽繃鏈� - config.setPasswordExpireTime(30); - } - log.info("寮�濮嬫墽琛屽瘑鐮佽繃鏈熷鐞�"); - userMapper.updatePasswordExpire(config.getPasswordExpireTime(), new Date()); - } -} diff --git a/src/main/java/com/ycl/jxkg/service/impl/UserServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/UserServiceImpl.java index a329a2b..1d7b664 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/UserServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/UserServiceImpl.java @@ -89,6 +89,7 @@ @Override public void insertUser(User user) { + user.setLastUpdatePasswordTime(new Date()); userMapper.insert(user); eventPublisher.publishEvent(new OnRegistrationCompleteEvent(user)); } @@ -96,6 +97,9 @@ @Override @Transactional(rollbackFor = BusinessException.class) public void insertUsers(List<User> users) { + users.stream().forEach(item -> { + item.setLastUpdatePasswordTime(new Date()); + }); userMapper.insertUsers(users); throw new BusinessException("test BusinessException roll back"); } @@ -189,7 +193,6 @@ new LambdaUpdateChainWrapper<>(baseMapper) .eq(User::getId, form.getUserId()) .set(User::getPassword, authenticationService.pwdEncode(form.getNewPassword())) - .set(User::getNeedUpdatePassword, YesOrNoEnum.NO) .set(User::getLastUpdatePasswordTime, new Date()) .update(); } diff --git a/src/main/java/com/ycl/jxkg/utils/DateTimeUtil.java b/src/main/java/com/ycl/jxkg/utils/DateTimeUtil.java index 1a45bac..2f9a2b2 100644 --- a/src/main/java/com/ycl/jxkg/utils/DateTimeUtil.java +++ b/src/main/java/com/ycl/jxkg/utils/DateTimeUtil.java @@ -164,4 +164,15 @@ public static Long getTwoTimeDiffMS(Date bigDate, Date smallDate) { return bigDate.getTime() - smallDate.getTime(); } + + /** + * 璁$畻涓や釜鏃堕棿涔嬮棿鐨勫ぉ鏁� + * + * @param bigDate 澶ф棩鏈� + * @param smallDate 灏忔棩鏈� + * @return + */ + public static Long getTwoTimeDiffDay(Date bigDate, Date smallDate) { + return DateTimeUtil.getTwoTimeDiffMS(bigDate, smallDate) / (24 * 60 * 60 * 1000); + } } diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index aafbe1f..7ae6eba 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -20,14 +20,13 @@ <result column="last_active_time" jdbcType="TIMESTAMP" property="lastActiveTime"/> <result column="deleted" jdbcType="BIT" property="deleted"/> <result column="wx_open_id" jdbcType="VARCHAR" property="wxOpenId"/> - <result column="need_update_password" property="needUpdatePassword" typeHandler="com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler"/> <result column="last_update_password_time" property="lastUpdatePasswordTime"/> </resultMap> <sql id="Base_Column_List"> id , user_uuid, user_name, password, real_name, age, sex, birth_day, user_level, phone, role, status, image_path, create_time, modify_time, last_active_time, deleted, wx_open_id, - need_update_password, last_update_password_time + last_update_password_time </sql> @@ -114,19 +113,19 @@ <insert id="insertUser" parameterType="com.ycl.jxkg.domain.entity.User" useGeneratedKeys="true" keyProperty="id"> insert into t_user - (user_uuid, user_name, password, real_name, age, last_active_time) - values (#{userUuid,jdbcType=VARCHAR}, #{userName}, #{password}, #{realName}, #{age}, #{lastActiveTime}) + (user_uuid, user_name, password, real_name, age, last_active_time, last_update_password_time) + values (#{userUuid,jdbcType=VARCHAR}, #{userName}, #{password}, #{realName}, #{age}, #{lastActiveTime}, #{lastUpdatePasswordTime}) </insert> <insert id="insertUsers" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id"> insert into t_user - (user_uuid,user_name,password,real_name,age,last_active_time) + (user_uuid,user_name,password,real_name,age,last_active_time, last_update_password_time) values <foreach collection="list" item="item" index="index" separator=","> (#{item.userUuid},#{item.userName},#{item.password},#{item.realName},#{item.age}, - #{item.lastActiveTime}) + #{item.lastActiveTime}, #{item.lastUpdatePasswordTime}) </foreach> </insert> @@ -208,15 +207,5 @@ ORDER BY tcu.create_time </select> - <update id="updatePasswordExpire"> - UPDATE - t_user - SET - need_update_password = 1,last_update_password_time = #{now} - WHERE - last_update_password_time IS NOT NULL - AND - DATEDIFF(#{now}, last_update_password_time) > #{expireDay} - </update> </mapper> -- Gitblit v1.8.0