Przeglądaj źródła

【CHG】密码使用天数

zhaomn 3 lat temu
rodzic
commit
393a162372

+ 8 - 2
railway-admin/src/main/java/com/railway/web/controller/system/SysLoginController.java

@@ -67,7 +67,7 @@ public class SysLoginController {
   @GetMapping("/getInfo")
   public AjaxResult getInfo() {
     SysUser user = SecurityUtils.getLoginUser().getUser();
-    if(loginService.isInitPassword()){
+    if (loginService.isInitPassword()) {
       log.warn("用户 - {}, 使用初始密码登录,需要修改密码后重新登录", user.getRealName());
       return AjaxResult.warn("当前用户使用初始密码登录,需要修改密码后重新登录");
     }
@@ -79,7 +79,13 @@ public class SysLoginController {
     Set<String> pages = menuService.selectMenuPagesByUserId(user.getUserId());
     // 按钮集合
     Set<String> bnts = menuService.selectMenuBtnsByUserId(user.getUserId());
-    AjaxResult ajax = AjaxResult.success();
+
+    AjaxResult ajax;
+    if (loginService.isExpiredPwd(user.getUserId())) {
+      ajax = AjaxResult.warn("密码超过限制使用天数,请及时修改");
+    } else {
+      ajax = AjaxResult.success();
+    }
     ajax.put("user", user);
     ajax.put("roles", roles);
     ajax.put("pages", pages);

+ 3 - 3
railway-admin/src/main/java/com/railway/web/controller/system/SysProfileController.java

@@ -161,7 +161,7 @@ public class SysProfileController extends BaseController {
   @PutMapping("/updatePwd")
   public AjaxResult updatePwd(String oldPassword, String newPassword) {
     LoginUser loginUser = getLoginUser();
-    String userName = loginUser.getUsername();
+    Long userId = loginUser.getUserId();
     String password = loginUser.getPassword();
     // 解码
     oldPassword = SecurityUtils.decode(oldPassword);
@@ -175,7 +175,7 @@ public class SysProfileController extends BaseController {
     if (WeakPasswordUtils.isWeakPassword(newPassword)) {
       return AjaxResult.error("当前密码为弱密码,请重新设置安全密码!");
     }
-    if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0) {
+    if (userService.resetUserPwd(userId, SecurityUtils.encryptPassword(newPassword)) > 0) {
       // 更新缓存用户密码
       loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
       tokenService.setLoginUser(loginUser);
@@ -194,7 +194,7 @@ public class SysProfileController extends BaseController {
     if (!file.isEmpty()) {
       LoginUser loginUser = getLoginUser();
       String avatar = sysFileService.uploadFile(file);
-      if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) {
+      if (userService.updateUserAvatar(loginUser.getUserId(), avatar)) {
         AjaxResult ajax = AjaxResult.success();
         ajax.put("imgUrl", avatar);
         // 更新缓存用户头像

+ 1 - 0
railway-common/src/main/java/com/railway/common/constant/UserConstants.java

@@ -51,6 +51,7 @@ public class UserConstants {
    * 是否为系统默认(是)
    */
   public static final String YES = "Y";
+  public static final String NO = "N";
 
   /**
    * 是否菜单外链(是)

+ 5 - 0
railway-common/src/main/java/com/railway/common/core/domain/entity/SysUser.java

@@ -15,6 +15,7 @@ import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.Size;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
 
 /**
  * 用户对象 sys_user
@@ -152,6 +153,10 @@ public class SysUser extends BaseEntity {
   @JsonIgnore
   private String password;
 
+  @JsonIgnore
+  @DateTimeFormat(pattern = "yyyy-MM-dd")
+  private Date pwdSetDate;
+
   /**
    * 盐加密
    */

+ 35 - 0
railway-framework/src/main/java/com/railway/framework/web/service/SysLoginService.java

@@ -1,6 +1,7 @@
 package com.railway.framework.web.service;
 
 import com.railway.common.constant.Constants;
+import com.railway.common.constant.UserConstants;
 import com.railway.common.core.domain.entity.SysDept;
 import com.railway.common.core.domain.entity.SysRole;
 import com.railway.common.core.domain.entity.SysUser;
@@ -19,9 +20,11 @@ import com.railway.common.utils.StringUtils;
 import com.railway.common.utils.ip.IpUtils;
 import com.railway.framework.manager.AsyncManager;
 import com.railway.framework.manager.factory.AsyncFactory;
+import com.railway.system.domain.SysConfig;
 import com.railway.system.service.ISysConfigService;
 import com.railway.system.service.ISysDeptService;
 import com.railway.system.service.ISysUserService;
+import java.util.Date;
 import java.util.List;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.security.authentication.AuthenticationManager;
@@ -101,6 +104,10 @@ public class SysLoginService {
     return tokenService.createToken(loginUser);
   }
 
+  /**
+   * 验证登录时密码是否是初始密码
+   * @return 验证结果
+   */
   public Boolean isInitPassword(){
     String password = SecurityUtils.getLoginUser().getPassword();
     String initPassword = configService.selectConfigByKey("sys.user.initPassword");
@@ -108,6 +115,34 @@ public class SysLoginService {
     return StringUtils.isEmpty(password) || password.equals(initPassword);
   }
 
+  /**
+   * 是否超过修改密码期限
+   * @param userId 用户ID
+   * @return 返回是否超过修改密码期限
+   */
+  public Boolean isExpiredPwd(Long userId){
+    SysUser user = userService.selectUserById(userId);
+    if(null == user){
+      return true;
+    }
+    Date pwdSetDate = user.getPwdSetDate();
+    if (null == pwdSetDate) {
+      return true;
+    }
+    String pwdExpired = configService.selectConfigByKey("pwd.expired");
+    if(StringUtils.isEmpty(pwdExpired)){
+      pwdExpired = "7";
+      SysConfig config = new SysConfig();
+      config.setConfigKey("pwd.expired");
+      config.setConfigName("密码限定使用日期");
+      config.setConfigType(UserConstants.NO);
+      config.setConfigValue(pwdExpired);
+      configService.insertConfig(config);
+    }
+    int days = Integer.parseInt(pwdExpired);
+    return DateUtils.differentDaysByMillisecond(new Date(), pwdSetDate) > days;
+  }
+
   /**
    * 校验验证码
    *

+ 4 - 4
railway-system/src/main/java/com/railway/system/mapper/SysUserMapper.java

@@ -96,20 +96,20 @@ public interface SysUserMapper {
   /**
    * 修改用户头像
    *
-   * @param userName 用户名
+   * @param userId 用户ID
    * @param avatar 头像地址
    * @return 结果
    */
-  int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar);
+  int updateUserAvatar(@Param("userId") Long userId, @Param("avatar") String avatar);
 
   /**
    * 重置用户密码
    *
-   * @param userName 用户名
+   * @param userId 用户ID
    * @param password 密码
    * @return 结果
    */
-  int resetUserPwd(@Param("userName") String userName, @Param("password") String password);
+  int resetUserPwd(@Param("userId") Long userId, @Param("password") String password);
 
   /**
    * 通过用户ID删除用户

+ 4 - 4
railway-system/src/main/java/com/railway/system/service/ISysUserService.java

@@ -195,11 +195,11 @@ public interface ISysUserService {
   /**
    * 修改用户头像
    *
-   * @param userName 用户名
+   * @param userId 用户ID
    * @param avatar 头像地址
    * @return 结果
    */
-  boolean updateUserAvatar(String userName, String avatar);
+  boolean updateUserAvatar(Long userId, String avatar);
 
   /**
    * 重置用户密码
@@ -212,11 +212,11 @@ public interface ISysUserService {
   /**
    * 重置用户密码
    *
-   * @param userName 用户名
+   * @param userId 用户ID
    * @param password 密码
    * @return 结果
    */
-  int resetUserPwd(String userName, String password);
+  int resetUserPwd(Long userId, String password);
 
   /**
    * 通过用户ID删除用户

+ 6 - 6
railway-system/src/main/java/com/railway/system/service/impl/SysUserServiceImpl.java

@@ -436,13 +436,13 @@ public class SysUserServiceImpl implements ISysUserService {
   /**
    * 修改用户头像
    *
-   * @param userName 用户名
+   * @param userId 用户ID
    * @param avatar 头像地址
    * @return 结果
    */
   @Override
-  public boolean updateUserAvatar(String userName, String avatar) {
-    return userMapper.updateUserAvatar(userName, avatar) > 0;
+  public boolean updateUserAvatar(Long userId, String avatar) {
+    return userMapper.updateUserAvatar(userId, avatar) > 0;
   }
 
   /**
@@ -461,13 +461,13 @@ public class SysUserServiceImpl implements ISysUserService {
   /**
    * 重置用户密码
    *
-   * @param userName 用户名
+   * @param userId 用户ID
    * @param password 密码
    * @return 结果
    */
   @Override
-  public int resetUserPwd(String userName, String password) {
-    return userMapper.resetUserPwd(userName, password);
+  public int resetUserPwd(Long userId, String password) {
+    return userMapper.resetUserPwd(userId, password);
   }
 
   /**

+ 22 - 15
railway-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -4,7 +4,7 @@
   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.railway.system.mapper.SysUserMapper">
 
-  <resultMap type="SysUser" id="SysUserResult">
+  <resultMap type="com.railway.common.core.domain.entity.SysUser" id="SysUserResult">
     <id property="userId" column="user_id"/>
     <result property="deptId" column="dept_id"/>
     <result property="userName" column="user_name"/>
@@ -20,6 +20,7 @@
     <result property="birthday" column="birthday"/>
     <result property="avatar" column="avatar"/>
     <result property="password" column="password"/>
+    <result property="pwdSetDate" column="pwd_set_date"/>
     <result property="status" column="status"/>
     <result property="delFlag" column="del_flag"/>
     <result property="loginIp" column="login_ip"/>
@@ -29,11 +30,12 @@
     <result property="updateBy" column="update_by"/>
     <result property="updateTime" column="update_time"/>
     <result property="remark" column="remark"/>
-    <association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult"/>
+    <association property="dept" column="dept_id"
+      javaType="com.railway.common.core.domain.entity.SysDept" resultMap="deptResult"/>
     <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
   </resultMap>
 
-  <resultMap id="deptResult" type="SysDept">
+  <resultMap id="deptResult" type="com.railway.common.core.domain.entity.SysDept">
     <id property="deptId" column="dept_id"/>
     <result property="parentId" column="parent_id"/>
     <result property="deptName" column="dept_name"/>
@@ -42,7 +44,7 @@
     <result property="status" column="dept_status"/>
   </resultMap>
 
-  <resultMap id="RoleResult" type="SysRole">
+  <resultMap id="RoleResult" type="com.railway.common.core.domain.entity.SysRole">
     <id property="roleId" column="role_id"/>
     <result property="roleName" column="role_name"/>
     <result property="roleKey" column="role_key"/>
@@ -54,7 +56,7 @@
   <sql id="selectUserVo">
     select u.user_id, u.dept_id, u.user_name, u.nick_name, u.real_name, u.email, u.avatar, u.phone,
     u.wechat, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by,
-    u.create_time, u.remark,u.birthday,u.post, u.mobile_id, dict.dict_label,
+    u.create_time, u.remark,u.birthday,u.post, u.mobile_id, u.pwd_set_date, dict.dict_label,
     d.dept_id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status,
     r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status,
     u.post, dict.dict_label as post_text
@@ -65,7 +67,8 @@
     LEFT JOIN sys_dict_data dict ON (u.post = dict.dict_value AND dict.dict_type = 'postType')
   </sql>
 
-  <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
+  <select id="selectUserList" parameterType="com.railway.common.core.domain.entity.SysUser"
+    resultMap="SysUserResult">
     <include refid="selectUserVo"/>
     where u.del_flag = '0'
     <if test="userId != null and userId != 0">
@@ -104,7 +107,8 @@
     ${params.dataScope}
   </select>
 
-  <select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
+  <select id="selectAllocatedList" parameterType="com.railway.common.core.domain.entity.SysUser"
+    resultMap="SysUserResult">
     select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.real_name, u.email, u.phone,
     u.wechat, u.status, u.create_time, u.post, dict.dict_label
     from sys_user u
@@ -123,7 +127,8 @@
     ${params.dataScope}
   </select>
 
-  <select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
+  <select id="selectUnallocatedList" parameterType="com.railway.common.core.domain.entity.SysUser"
+    resultMap="SysUserResult">
     select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.real_name, u.email, u.phone,
     u.wechat, u.status, u.create_time, u.post, dict.dict_label
     from sys_user u
@@ -184,7 +189,8 @@
     select user_id, email from sys_user where email = #{email} limit 1
   </select>
 
-  <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
+  <insert id="insertUser" parameterType="com.railway.common.core.domain.entity.SysUser"
+    useGeneratedKeys="true" keyProperty="userId">
     insert into sys_user(
     <if test="userId != null and userId != 0">user_id,</if>
     <if test="deptId != null and deptId != 0">dept_id,</if>
@@ -224,7 +230,7 @@
     )
   </insert>
 
-  <update id="updateUser" parameterType="SysUser">
+  <update id="updateUser" parameterType="com.railway.common.core.domain.entity.SysUser">
     update sys_user
     <set>
       <if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
@@ -250,16 +256,17 @@
     where user_id = #{userId}
   </update>
 
-  <update id="updateUserStatus" parameterType="SysUser">
+  <update id="updateUserStatus" parameterType="com.railway.common.core.domain.entity.SysUser">
     update sys_user set status = #{status} where user_id = #{userId}
   </update>
 
-  <update id="updateUserAvatar" parameterType="SysUser">
-    update sys_user set avatar = #{avatar} where user_name = #{userName}
+  <update id="updateUserAvatar" parameterType="com.railway.common.core.domain.entity.SysUser">
+    update sys_user set avatar = #{avatar} where user_id = #{userId}
   </update>
 
-  <update id="resetUserPwd" parameterType="SysUser">
-    update sys_user set password = #{password} where user_name = #{userName}
+  <update id="resetUserPwd" parameterType="com.railway.common.core.domain.entity.SysUser">
+    update sys_user set password = #{password}, pwd_set_date = current_date()
+    where user_id = #{userId}
   </update>
 
   <delete id="deleteUserById" parameterType="Long">

+ 5 - 1
sql/update-id.sql

@@ -42,4 +42,8 @@ update base_wjcxc t inner join base_line t1 on t.xb = t1.line_name
     set t.line_id = t1.line_id  ;
 
 update base_wjcxc t inner join base_station t1 on t.qj = t1.station_name
-    set t.station_id = t1.station_id  ;
+    set t.station_id = t1.station_id  ;
+
+
+-- 2022.5.2增加密码修改时间字段
+ALTER TABLE `sys_user` ADD COLUMN `pwd_set_date` datetime(0) NULL DEFAULT NULL COMMENT '密码设置时间' AFTER `password`;