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