📄 登录强制重置密码
内部资料,请扫码登录
pigcloud
# 背景
登录强制重置密码功能是指当用户登录时系统检测到安全风险或者密码过期等情况时,强制用户进行密码重置操作。
# ① sys_user 密码过期字段
- password_expire_flag:密码过期标记,0 未过期,9 过期
- password_modify_time:密码修改时间
# ② 密码过期轮训
目前系统没有默认内置密码过期判断的逻辑,推荐使用 XXL-JOB 定时任务轮询用户密码过期状态,每隔一段时间查询用户密码是否过期,如果过期则修改如上密码过期 password_expire_flag 字段为 9。
# ③ XXL-JOB 任务策略
@Slf4j
@Component
@RequiredArgsConstructor
public class SecurityJob {
private final SysUserMapper sysUserMapper;
private final SysTenantMapper sysTenantMapper;
private final CacheManager cacheManager;
/**
* 修改用户密码过期标识
*/
@XxlJob("modifyPasswordExpireFlag")
public ReturnT<String> modifyPasswordExpireFlag() {
for (SysTenant sysTenant : sysTenantMapper.selectList(Wrappers.emptyWrapper())) {
TenantBroker.runAs(sysTenant.getId(), id -> {
// 30天未修改密码的用户,状态修改为强制修改 9
sysUserMapper.update(Wrappers.<SysUser>lambdaUpdate()
.set(SysUser::getPasswordExpireFlag, CommonConstants.STATUS_LOCK)
.le(SysUser::getPasswordExpireFlag, DateUtil.offsetDay(DateUtil.date(), -30))
);
// 清除缓存
sysUserMapper.selectList(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getPasswordExpireFlag, CommonConstants.STATUS_LOCK))
.forEach(user -> cacheManager.getCache(CacheConstants.USER_DETAILS).evict(user.getUsername()));
});
}
return ReturnT.SUCCESS;
}
}