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