From 5f3aca56b2304acca3d6ac1ef3e5749516edcab9 Mon Sep 17 00:00:00 2001 From: anthonywj Date: Sun, 8 Oct 2023 09:15:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B6=85=E6=97=B6=E4=BF=AE=E6=94=B9=E5=AF=86?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/glxp/api/constant/Constant.java | 3 + .../controller/auth/AuthUserController.java | 32 +++++---- .../api/controller/auth/LoginController.java | 16 +++-- .../com/glxp/api/entity/auth/AuthAdmin.java | 6 +- .../api/req/auth/UpdatePasswordRequest.java | 4 ++ .../glxp/api/req/auth/UpdateUserRequset.java | 6 ++ .../com/glxp/api/res/auth/LoginResponse.java | 2 + .../auth/impl/AuthAdminServiceImpl.java | 1 + .../mybatis/mapper/auth/AuthAdminDao.xml | 66 ++++++++++--------- src/main/resources/schemas/schema_v2.3.sql | 4 ++ 10 files changed, 89 insertions(+), 51 deletions(-) diff --git a/src/main/java/com/glxp/api/constant/Constant.java b/src/main/java/com/glxp/api/constant/Constant.java index ffd24cc8f..85449ab03 100644 --- a/src/main/java/com/glxp/api/constant/Constant.java +++ b/src/main/java/com/glxp/api/constant/Constant.java @@ -295,4 +295,7 @@ public class Constant { public static final String ORDER_THIRD_STOCK = "stock"; //内部码 public static final String SYNC_REMARK = "syncRemark"; + + //密码复杂度校验 + public static final String passwordReg = "^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W_.*%@!]+$)(?![a-z0-9]+$)(?![a-z\\W_.;*%@!]+$)(?![0-9\\W_.;*%@!]+$)[a-zA-Z0-9\\W_.;*%@!]{8,20}$"; } diff --git a/src/main/java/com/glxp/api/controller/auth/AuthUserController.java b/src/main/java/com/glxp/api/controller/auth/AuthUserController.java index 094d2a6c6..db7b1c5c1 100644 --- a/src/main/java/com/glxp/api/controller/auth/AuthUserController.java +++ b/src/main/java/com/glxp/api/controller/auth/AuthUserController.java @@ -131,33 +131,37 @@ public class AuthUserController extends BaseController { @AuthRuleAnnotation("") @GetMapping("/admin/auth/admin/selectUser") public BaseResponse selectUser() { - AuthAdmin authAdmin=customerService.getUserBean(); + AuthAdmin authAdmin = customerService.getUserBean(); return ResultVOUtils.success(authAdmin); } //修改用户信息 @AuthRuleAnnotation("") @PostMapping("/admin/auth/admin/updateUser") - public BaseResponse updateUser(@RequestBody UpdateUserRequset updateUserRequset) { - AuthAdmin authAdmin=customerService.getUserBean(); + public BaseResponse updateUser(@RequestBody @Valid UpdateUserRequset updateUserRequset,BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL.getCode(), + bindingResult.getFieldError().getDefaultMessage()); + } + AuthAdmin authAdmin = customerService.getUserBean(); System.out.println(updateUserRequset.toString()); - if (StringUtils.isBlank(updateUserRequset.getNewPassword())){ - return ResultVOUtils.error(500,"请输入新密码!"); + if (StringUtils.isBlank(updateUserRequset.getNewPassword())) { + return ResultVOUtils.error(500, "请输入新密码!"); } - if (StringUtils.isBlank(updateUserRequset.getConfirmPassword())){ - return ResultVOUtils.error(500,"请输入确认密码!"); + if (StringUtils.isBlank(updateUserRequset.getConfirmPassword())) { + return ResultVOUtils.error(500, "请输入确认密码!"); } - if (!updateUserRequset.getPassWord().equals(authAdmin.getPassWord())){ - return ResultVOUtils.error(500,"当前密码输入错误!请重新输入!"); + if (!updateUserRequset.getPassWord().equals(authAdmin.getPassWord())) { + return ResultVOUtils.error(500, "当前密码输入错误!请重新输入!"); } - if (updateUserRequset.getNewPassword().equals(authAdmin.getPassWord())){ - return ResultVOUtils.error(500,"新密码与旧密码重复!请重新修改!"); + if (updateUserRequset.getNewPassword().equals(authAdmin.getPassWord())) { + return ResultVOUtils.error(500, "新密码与旧密码重复!请重新修改!"); } - if (updateUserRequset.getNewPassword().equals(updateUserRequset.getConfirmPassword())&&updateUserRequset.getPassWord().equals(authAdmin.getPassWord())){ + if (updateUserRequset.getNewPassword().equals(updateUserRequset.getConfirmPassword()) && updateUserRequset.getPassWord().equals(authAdmin.getPassWord())) { customerService.update(updateUserRequset); return ResultVOUtils.success("修改成功"); - }else { - return ResultVOUtils.error(500,"新密码与确认密码不相同!请重新修改!"); + } else { + return ResultVOUtils.error(500, "新密码与确认密码不相同!请重新修改!"); } } diff --git a/src/main/java/com/glxp/api/controller/auth/LoginController.java b/src/main/java/com/glxp/api/controller/auth/LoginController.java index 39deb4b3f..a5987d123 100644 --- a/src/main/java/com/glxp/api/controller/auth/LoginController.java +++ b/src/main/java/com/glxp/api/controller/auth/LoginController.java @@ -1,5 +1,7 @@ package com.glxp.api.controller.auth; +import cn.hutool.core.date.DateUnit; +import cn.hutool.crypto.SecureUtil; import org.springframework.beans.BeanUtils; import cn.hutool.core.util.StrUtil; import com.glxp.api.annotation.AuthRuleAnnotation; @@ -79,10 +81,14 @@ public class LoginController extends BaseController { if (authAdmin == null) { throw new JsonException(ResultEnum.DATA_NOT, "用户名或密码错误"); } - - if (!PasswordUtils.authAdminPwd(loginRequest.getPassword()).equals(authAdmin.getPassWord())) { +// && !PasswordUtils.authAdminPwd(loginRequest.getPassword()).equals(authAdmin.getPassWord()) + if (!PasswordUtils.authAdminPwd(loginRequest.getPassword()).equals(SecureUtil.sha256(authAdmin.getPassWord()))) { throw new JsonException(ResultEnum.DATA_NOT, "用户名或密码错误"); } + +// if (!PasswordUtils.authAdminPwd(loginRequest.getPassword()).equals(authAdmin.getPassWord())) { +// throw new JsonException(ResultEnum.DATA_NOT, "用户名或密码错误"); +// } if (authAdmin.getUserFlag() == 0) { throw new JsonException(ResultEnum.DATA_NOT, "该用户已被禁用!"); } @@ -109,7 +115,7 @@ public class LoginController extends BaseController { Map claims = new HashMap<>(); claims.put("admin_id", authAdmin.getId()); - String token = JwtUtils.createToken(claims, 86400L); // 一天后过期 + String token = JwtUtils.createToken(claims, 1800l); // 一天后过期 Map map = new HashMap<>(); map.put("id", authAdmin.getId()); @@ -120,7 +126,8 @@ public class LoginController extends BaseController { loginResponse.setToken(token); loginResponse.setDept(authAdmin.getLocDeptCode()); loginResponse.setDeptName(authAdmin.getDeptName()); - + loginResponse.setNeedChangePwd(cn.hutool.core.date.DateUtil.between(authAdmin.getLastUpdatePwdTime() == null ? cn.hutool.core.date.DateUtil.date() : authAdmin.getLastUpdatePwdTime() + , cn.hutool.core.date.DateUtil.date(), DateUnit.DAY) >= 90); logininforService.recordLogininfor(authAdmin.getEmployeeName(), Constant.LOGIN_SUCCESS, "登录成功!", request); return ResultVOUtils.success(loginResponse); @@ -370,6 +377,7 @@ public class LoginController extends BaseController { AuthAdmin authAdminUp = new AuthAdmin(); authAdminUp.setId(authAdmin.getId()); + authAdminUp.setLastUpdatePwdTime(new Date()); String newPwd = PasswordUtils.authAdminPwd(updatePasswordRequest.getNewPassword()); authAdminUp.setPassWord(newPwd); authAdmin.setLastModifyTime(new Date()); diff --git a/src/main/java/com/glxp/api/entity/auth/AuthAdmin.java b/src/main/java/com/glxp/api/entity/auth/AuthAdmin.java index e9bec27d3..debb51aa8 100644 --- a/src/main/java/com/glxp/api/entity/auth/AuthAdmin.java +++ b/src/main/java/com/glxp/api/entity/auth/AuthAdmin.java @@ -33,7 +33,11 @@ public class AuthAdmin { // 状态 @TableField("userFlag") private Integer userFlag; - + /** + * 最后一次修改密码时间 + */ + @TableField("lastUpdatePwdTime") + private Date lastUpdatePwdTime; @TableField("lastModifyTime") private Date lastModifyTime; private String comments; diff --git a/src/main/java/com/glxp/api/req/auth/UpdatePasswordRequest.java b/src/main/java/com/glxp/api/req/auth/UpdatePasswordRequest.java index eefdefd8c..528a2441c 100644 --- a/src/main/java/com/glxp/api/req/auth/UpdatePasswordRequest.java +++ b/src/main/java/com/glxp/api/req/auth/UpdatePasswordRequest.java @@ -1,9 +1,11 @@ package com.glxp.api.req.auth; +import com.glxp.api.constant.Constant; import lombok.Data; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; /** * 修改密码的表单 @@ -18,6 +20,8 @@ public class UpdatePasswordRequest { private String oldPassword; @NotEmpty(message = "请输入新密码") + @Pattern(regexp = Constant.passwordReg + , message = "密码需要包含大写字母、小写字符、数字、特殊字符(含_.*%@!)其中任意三种,长度8-20位") private String newPassword; } diff --git a/src/main/java/com/glxp/api/req/auth/UpdateUserRequset.java b/src/main/java/com/glxp/api/req/auth/UpdateUserRequset.java index c3a94ee66..37709d490 100644 --- a/src/main/java/com/glxp/api/req/auth/UpdateUserRequset.java +++ b/src/main/java/com/glxp/api/req/auth/UpdateUserRequset.java @@ -1,9 +1,12 @@ package com.glxp.api.req.auth; import com.baomidou.mybatisplus.annotation.TableField; +import com.glxp.api.constant.Constant; import com.glxp.api.entity.auth.SysRole; import lombok.Data; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; import java.util.Date; import java.util.List; @@ -14,6 +17,9 @@ public class UpdateUserRequset { private String userName; // 登录密码 private String passWord; + @NotEmpty(message = "请输入新密码") + @Pattern(regexp = Constant.passwordReg + , message = "密码需要包含大写字母、小写字符、数字、特殊字符(含_.*%@!)其中任意三种,长度8-20位") private String newPassword; private String confirmPassword; // 最后登录ip diff --git a/src/main/java/com/glxp/api/res/auth/LoginResponse.java b/src/main/java/com/glxp/api/res/auth/LoginResponse.java index 00b9a1811..565b92db3 100644 --- a/src/main/java/com/glxp/api/res/auth/LoginResponse.java +++ b/src/main/java/com/glxp/api/res/auth/LoginResponse.java @@ -25,5 +25,7 @@ public class LoginResponse { */ private List menus; + private boolean needChangePwd = false; + } diff --git a/src/main/java/com/glxp/api/service/auth/impl/AuthAdminServiceImpl.java b/src/main/java/com/glxp/api/service/auth/impl/AuthAdminServiceImpl.java index ef1e8996d..941828667 100644 --- a/src/main/java/com/glxp/api/service/auth/impl/AuthAdminServiceImpl.java +++ b/src/main/java/com/glxp/api/service/auth/impl/AuthAdminServiceImpl.java @@ -89,6 +89,7 @@ public class AuthAdminServiceImpl extends ServiceImpl i } } authAdmin.setCreateTime(new Date()); + authAdmin.setLastUpdatePwdTime(new Date()); return authAdminDao.insertAuthAdmin(authAdmin); } diff --git a/src/main/resources/mybatis/mapper/auth/AuthAdminDao.xml b/src/main/resources/mybatis/mapper/auth/AuthAdminDao.xml index 282aadcac..e6282df41 100644 --- a/src/main/resources/mybatis/mapper/auth/AuthAdminDao.xml +++ b/src/main/resources/mybatis/mapper/auth/AuthAdminDao.xml @@ -6,7 +6,7 @@ resultType="com.glxp.api.entity.auth.AuthAdmin"> SELECT auth_user.*, auth_dept.name deptName FROM auth_user - left join auth_dept on auth_user.locDeptCode = auth_dept.code + left join auth_dept on auth_user.locDeptCode = auth_dept.code AND id IN @@ -29,8 +29,8 @@ = DATE_FORMAT(#{lastUpdateTime} - , '%Y-%m-%d %H:%i:%S') + , '%Y-%m-%d %H:%i:%S') >= DATE_FORMAT(#{lastUpdateTime} + , '%Y-%m-%d %H:%i:%S') ]]> @@ -38,7 +38,6 @@ ORDER BY id DESC - - INSERT INTO auth_user( id,userName, passWord, lastLoginIp, lastLoginTime, createTime, userFlag - , employeeName, CustomerId, lastModifyTime, locDeptCode, locInvCode, comments) - values - (#{id}, #{userName}, + INSERT INTO auth_user( id, userName, passWord, lastLoginIp, lastLoginTime, createTime, userFlag + , employeeName, CustomerId, lastModifyTime, locDeptCode, locInvCode, comments + , lastUpdatePwdTime) + values + (#{id}, #{userName}, #{passWord}, @@ -105,28 +105,27 @@ #{CustomerId}, #{lastModifyTime}, #{locDeptCode}, - #{locInvCode}, #{comments}) + #{locInvCode}, #{comments}, #{lastUpdatePwdTime}) replace - INTO auth_user(id, userName, passWord, lastLoginIp, - lastLoginTime, createTime, userFlag, lastModifyTime, employeeName,CustomerId,locDeptCode,locInvCode,comments) - values ( - #{id}, - #{userName}, - #{passWord}, - #{lastLoginIp}, - #{lastLoginTime}, - #{createTime}, - #{userFlag,jdbcType=INTEGER}, - #{lastModifyTime}, - #{employeeName}, - #{CustomerId}, - #{locDeptCode}, - #{locInvCode}, - #{comments} - ) + INTO auth_user(id, userName, passWord, lastLoginIp, + lastLoginTime, createTime, userFlag, lastModifyTime, employeeName, CustomerId, + locDeptCode, locInvCode, comments, lastUpdatePwdTime) + values (#{id}, + #{userName}, + #{passWord}, + #{lastLoginIp}, + #{lastLoginTime}, + #{createTime}, + #{userFlag,jdbcType=INTEGER}, + #{lastModifyTime}, + #{employeeName}, + #{CustomerId}, + #{locDeptCode}, + #{locInvCode}, + #{comments}, #{lastUpdatePwdTime}) @@ -148,6 +147,9 @@ lastModifyTime=#{lastModifyTime}, + + lastUpdatePwdTime=#{lastUpdatePwdTime}, + userFlag=#{userFlag}, @@ -191,14 +193,14 @@