登录强制重置密码

登录强制重置密码功能是企业级安全合规的重要组成部分。当系统检测到用户密码已超过安全期限时,会强制用户进行密码重置操作,有效防范因长期使用同一密码带来的安全风险。

自 V5.12.1 起,强制重置密码 建议在网站配置的图形化界面中开启,无需再手动修改配置文件。

参数管理界面

功能架构

功能架构图

配置说明

必须同时满足

以下条件需要全部满足才会触发密码过期检查

条件说明
security.expirePassword = true功能开关已开启
passwordModifyTime 不为空有密码修改记录
距今天数 > PASSWORD_EXPIRE_DAYS超过有效期

1. 开启功能开关

旧版配置位置

微服务版本在 nacos/pigx-auth-dev.yml 中添加,单体版本在 application.yml 中添加。

security:
  expirePassword: true

2. 配置过期天数

密码有效期

默认密码过期为 90 天,如需修改可通过系统参数 PASSWORD_EXPIRE_DAYS 调整

通过 系统管理 → 参数管理 配置 PASSWORD_EXPIRE_DAYS 参数:

参数键默认值说明
PASSWORD_EXPIRE_DAYS90密码有效期(天)

数据库设计

sys_user 表字段

字段名类型说明
password_modify_timedatetime密码最后修改时间
数据库字段设计

核心逻辑

判断流程

实现位置

核心逻辑位于 PigxDaoAuthenticationProvider.java 第 144-154 行

// 判断密码是否过期
AuthSecurityConfigProperties configProperties = SpringUtil.getBean(AuthSecurityConfigProperties.class);
if (configProperties.isExpirePassword() && userDetails instanceof PigxUser pigxUser
        && Objects.nonNull(pigxUser.getPasswordModifyTime())) {
    Long expireDays = ParamResolver.getLong("PASSWORD_EXPIRE_DAYS", 90L);
    long daysBetween = ChronoUnit.DAYS.between(pigxUser.getPasswordModifyTime(), LocalDateTime.now());
    if (daysBetween > expireDays) {
        throw new CredentialsExpiredException("User credentials have expired");
    }
}