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