From 9a7ee496344f044c89deddb70600b7e4d6017e1f Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 09 七月 2024 17:37:16 +0800
Subject: [PATCH] 密码强制修改实现

---
 src/main/java/com/ycl/jxkg/enums/general/YesOrNoEnum.java                               |   30 ++++++++++
 src/main/java/com/ycl/jxkg/service/AuthenticationService.java                           |   11 ---
 src/main/java/com/ycl/jxkg/service/UserService.java                                     |    8 ++
 src/main/java/com/ycl/jxkg/config/spring/security/RestAuthenticationSuccessHandler.java |    6 ++
 src/main/java/com/ycl/jxkg/service/impl/UserServiceImpl.java                            |   17 +++++
 src/main/java/com/ycl/jxkg/config/spring/security/SecurityConfigurer.java               |    1 
 src/main/java/com/ycl/jxkg/domain/form/UpdatePwdForm.java                               |   24 ++++++++
 src/main/java/com/ycl/jxkg/domain/entity/User.java                                      |   13 ++++
 src/main/java/com/ycl/jxkg/controller/admin/UserController.java                         |    9 +++
 src/main/java/com/ycl/jxkg/service/impl/AuthenticationServiceImpl.java                  |   18 -----
 src/main/resources/mapper/UserMapper.xml                                                |    5 +
 11 files changed, 113 insertions(+), 29 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 a576497..a5ead92 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
@@ -2,6 +2,7 @@
 
 import com.ycl.jxkg.base.SystemCode;
 import com.ycl.jxkg.domain.entity.UserEventLog;
+import com.ycl.jxkg.enums.general.YesOrNoEnum;
 import com.ycl.jxkg.event.UserEvent;
 import com.ycl.jxkg.service.UserService;
 import org.springframework.beans.BeanUtils;
@@ -50,6 +51,11 @@
             User springUser = (User) object;
             com.ycl.jxkg.domain.entity.User user = userService.getUserByUserName(springUser.getUsername());
             if (null != user) {
+                // 瀵嗙爜杩囨湡杩斿洖寮哄埗淇敼瀵嗙爜鏍囪瘑
+                if (YesOrNoEnum.YES.equals(user.getNeedUpdatePassword())) {
+                    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/config/spring/security/SecurityConfigurer.java b/src/main/java/com/ycl/jxkg/config/spring/security/SecurityConfigurer.java
index 1eb012c..596abfb 100644
--- a/src/main/java/com/ycl/jxkg/config/spring/security/SecurityConfigurer.java
+++ b/src/main/java/com/ycl/jxkg/config/spring/security/SecurityConfigurer.java
@@ -84,6 +84,7 @@
                     .and().authenticationProvider(restAuthenticationProvider)
                     .authorizeRequests()
                     .antMatchers(securityIgnoreUrls.toArray(ignores)).permitAll()
+                    .antMatchers("/api/admin/user/update/password").permitAll()
                     .antMatchers("/api/admin/**").hasRole(RoleEnum.ADMIN.getName())
                     .antMatchers("/api/student/**").hasRole(RoleEnum.STUDENT.getName())
                     .antMatchers("/api/register/**").anonymous()
diff --git a/src/main/java/com/ycl/jxkg/controller/admin/UserController.java b/src/main/java/com/ycl/jxkg/controller/admin/UserController.java
index 17c4c88..18e9c42 100644
--- a/src/main/java/com/ycl/jxkg/controller/admin/UserController.java
+++ b/src/main/java/com/ycl/jxkg/controller/admin/UserController.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.ycl.jxkg.base.BaseApiController;
 import com.ycl.jxkg.base.Result;
+import com.ycl.jxkg.domain.form.UpdatePwdForm;
 import com.ycl.jxkg.enums.RoleEnum;
 import com.ycl.jxkg.domain.other.KeyValue;
 import com.ycl.jxkg.domain.entity.User;
@@ -20,6 +21,7 @@
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -164,4 +166,11 @@
         return Result.ok(keyValues);
     }
 
+    @PostMapping("/update/password")
+    public Result<Object> updatePassword(@RequestBody @Validated UpdatePwdForm form) {
+        userService.updatePassword(form);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+
 }
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 784175c..3b827d2 100644
--- a/src/main/java/com/ycl/jxkg/domain/entity/User.java
+++ b/src/main/java/com/ycl/jxkg/domain/entity/User.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.ycl.jxkg.domain.base.AbsEntity;
+import com.ycl.jxkg.enums.general.YesOrNoEnum;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -85,4 +86,16 @@
     @TableField("wx_open_id")
     private String wxOpenId;
 
+    @TableField("need_update_password")
+    /**
+     * 鏄惁闇�瑕佷慨鏀瑰瘑鐮�
+     */
+    private YesOrNoEnum needUpdatePassword;
+
+    @TableField("last_update_password_time")
+    /**
+     * 涓婁竴娆′慨鏀瑰瘑鐮佺殑鏃堕棿
+     */
+    private Date lastUpdatePasswordTime;
+
 }
diff --git a/src/main/java/com/ycl/jxkg/domain/form/UpdatePwdForm.java b/src/main/java/com/ycl/jxkg/domain/form/UpdatePwdForm.java
new file mode 100644
index 0000000..1d63692
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/domain/form/UpdatePwdForm.java
@@ -0,0 +1,24 @@
+package com.ycl.jxkg.domain.form;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 淇敼瀵嗙爜琛ㄥ崟鏁版嵁
+ *
+ * @author锛歺p
+ * @date锛�2024/7/9 16:23
+ */
+@Data
+public class UpdatePwdForm {
+
+    @NotNull(message = "淇敼澶辫触")
+    private Integer userId;
+
+    /** 鏂板瘑鐮� */
+    @NotBlank(message = "璇疯緭鍏ユ柊瀵嗙爜")
+    private String newPassword;
+
+}
diff --git a/src/main/java/com/ycl/jxkg/enums/general/YesOrNoEnum.java b/src/main/java/com/ycl/jxkg/enums/general/YesOrNoEnum.java
new file mode 100644
index 0000000..ec1debf
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/enums/general/YesOrNoEnum.java
@@ -0,0 +1,30 @@
+package com.ycl.jxkg.enums.general;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.Getter;
+
+/**
+ * 鏄惁
+ *
+ * @author锛歺p
+ * @date锛�2024/6/4 9:35
+ */
+@Getter
+public enum YesOrNoEnum {
+
+    NO(0, "鍚�"),
+    YES(1, "鏄�"),
+    ;
+
+    @EnumValue
+    private final Integer value;
+
+    @JsonValue
+    private final String desc;
+
+    YesOrNoEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+}
diff --git a/src/main/java/com/ycl/jxkg/service/AuthenticationService.java b/src/main/java/com/ycl/jxkg/service/AuthenticationService.java
index 8d2eac3..f040b82 100644
--- a/src/main/java/com/ycl/jxkg/service/AuthenticationService.java
+++ b/src/main/java/com/ycl/jxkg/service/AuthenticationService.java
@@ -8,17 +8,6 @@
     /**
      * authUser
      *
-     * @param username username
-     * @param password password
-     * @return boolean
-     */
-    boolean authUser(String username, String password);
-
-
-
-    /**
-     * authUser
-     *
      * @param user     user
      * @param username username
      * @param password password
diff --git a/src/main/java/com/ycl/jxkg/service/UserService.java b/src/main/java/com/ycl/jxkg/service/UserService.java
index 9644f52..54b602f 100644
--- a/src/main/java/com/ycl/jxkg/service/UserService.java
+++ b/src/main/java/com/ycl/jxkg/service/UserService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ycl.jxkg.domain.form.RegisterForm;
+import com.ycl.jxkg.domain.form.UpdatePwdForm;
 import com.ycl.jxkg.domain.other.KeyValue;
 import com.ycl.jxkg.domain.entity.User;
 import com.ycl.jxkg.domain.vo.StudentVO;
@@ -150,4 +151,11 @@
      * @return
      */
     List<StudentVO> classesStudent(Integer classesId);
+
+    /**
+     * 淇敼瀵嗙爜
+     *
+     * @param form
+     */
+    void updatePassword(UpdatePwdForm form);
 }
diff --git a/src/main/java/com/ycl/jxkg/service/impl/AuthenticationServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/AuthenticationServiceImpl.java
index ba026ee..4b28628 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/AuthenticationServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/AuthenticationServiceImpl.java
@@ -12,28 +12,12 @@
 @Service
 public class AuthenticationServiceImpl implements AuthenticationService {
 
-
-    private final UserService userService;
     private final SystemConfig systemConfig;
 
     @Autowired
-    public AuthenticationServiceImpl(UserService userService, SystemConfig systemConfig) {
-        this.userService = userService;
+    public AuthenticationServiceImpl(SystemConfig systemConfig) {
         this.systemConfig = systemConfig;
     }
-
-
-    /**
-     * @param username username
-     * @param password password
-     * @return boolean
-     */
-    @Override
-    public boolean authUser(String username, String password) {
-        User user = userService.getUserByUserName(username);
-        return authUser(user, username, password);
-    }
-
 
     @Override
     public boolean authUser(User user, String username, String password) {
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 1b25a59..a329a2b 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/UserServiceImpl.java
@@ -1,17 +1,22 @@
 package com.ycl.jxkg.service.impl;
 
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qiniu.util.Md5;
 import com.ycl.jxkg.domain.entity.UserEventLog;
+import com.ycl.jxkg.domain.form.UpdatePwdForm;
 import com.ycl.jxkg.enums.RoleEnum;
 import com.ycl.jxkg.enums.UserStatusEnum;
 import com.ycl.jxkg.domain.form.RegisterForm;
 import com.ycl.jxkg.domain.other.KeyValue;
 import com.ycl.jxkg.domain.vo.StudentVO;
+import com.ycl.jxkg.enums.general.YesOrNoEnum;
 import com.ycl.jxkg.event.UserEvent;
 import com.ycl.jxkg.exception.BusinessException;
 import com.ycl.jxkg.domain.entity.User;
 import com.ycl.jxkg.event.OnRegistrationCompleteEvent;
 import com.ycl.jxkg.mapper.UserMapper;
+import com.ycl.jxkg.service.AuthenticationService;
 import com.ycl.jxkg.service.UserService;
 import com.ycl.jxkg.domain.vo.admin.user.UserPageRequestVO;
 import com.github.pagehelper.PageHelper;
@@ -22,6 +27,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 
 
@@ -31,6 +37,7 @@
 
     private final UserMapper userMapper;
     private final ApplicationEventPublisher eventPublisher;
+    private final AuthenticationService authenticationService;
 
 
     public List<User> getUsers() {
@@ -176,4 +183,14 @@
     public List<StudentVO> classesStudent(Integer classesId) {
         return userMapper.classesStudent(classesId);
     }
+
+    @Override
+    public void updatePassword(UpdatePwdForm form) {
+        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/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
index 4015a23..d3ee58e 100644
--- a/src/main/resources/mapper/UserMapper.xml
+++ b/src/main/resources/mapper/UserMapper.xml
@@ -20,11 +20,14 @@
         <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
+    role, status, image_path, create_time, modify_time, last_active_time, deleted, wx_open_id,
+    need_update_password, last_update_password_time
     </sql>
 
 

--
Gitblit v1.8.0