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