添加密码状态检查
This commit is contained in:
parent
edbc02bbaf
commit
920874a82d
@ -1,8 +1,10 @@
|
||||
package ink.wgink.interfaces.user;
|
||||
|
||||
import ink.wgink.interfaces.manager.ISystemConfigManager;
|
||||
import ink.wgink.pojo.ListPage;
|
||||
import ink.wgink.pojo.dtos.department.DepartmentUserDTO;
|
||||
import ink.wgink.pojo.dtos.user.UserDTO;
|
||||
import ink.wgink.pojo.result.SuccessResultData;
|
||||
import ink.wgink.pojo.result.SuccessResultList;
|
||||
|
||||
import java.util.List;
|
||||
@ -124,4 +126,12 @@ public interface IUserBaseService {
|
||||
* @return
|
||||
*/
|
||||
Integer countState(int userState);
|
||||
|
||||
/**
|
||||
* 获取密码状态
|
||||
*
|
||||
* @param systemConfigManager
|
||||
* @return
|
||||
*/
|
||||
SuccessResultData<String> getPasswordStatus(ISystemConfigManager systemConfigManager);
|
||||
}
|
||||
|
@ -6,15 +6,12 @@ import ink.wgink.exceptions.ParamsException;
|
||||
import ink.wgink.interfaces.consts.IFileConstant;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.interfaces.manager.ISystemConfigManager;
|
||||
import ink.wgink.pojo.result.*;
|
||||
import ink.wgink.pojo.vos.IdsVO;
|
||||
import ink.wgink.service.user.pojo.vos.*;
|
||||
import ink.wgink.pojo.ListPage;
|
||||
import ink.wgink.pojo.dtos.user.UserDTO;
|
||||
import ink.wgink.pojo.result.ErrorResult;
|
||||
import ink.wgink.pojo.result.SuccessResult;
|
||||
import ink.wgink.pojo.result.SuccessResultList;
|
||||
import ink.wgink.service.user.service.IUserService;
|
||||
import ink.wgink.pojo.result.UploadExcelResultDTO;
|
||||
import ink.wgink.util.ReflectUtil;
|
||||
import ink.wgink.util.RegexUtil;
|
||||
import io.swagger.annotations.*;
|
||||
@ -219,4 +216,12 @@ public class UserController extends DefaultBaseController {
|
||||
return userService.listByUserIds(idsVO.getIds());
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取密码状态", notes = "获取密码状态接口")
|
||||
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
|
||||
@GetMapping("get-password-status")
|
||||
public SuccessResultData<String> getPasswordStatus() throws ReflectUtil.ReflectException {
|
||||
ISystemConfigManager systemConfigManager = ReflectUtil.getSingleInstance("ink.wgink.login.base.manager.ConfigManager", ISystemConfigManager.class);
|
||||
return userService.getPasswordStatus(systemConfigManager);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -123,4 +123,12 @@ public interface IUserDao {
|
||||
*/
|
||||
Integer count(Map<String, Object> params) throws SearchException;
|
||||
|
||||
/**
|
||||
* 密码修改时间
|
||||
*
|
||||
* @param userId
|
||||
* @return
|
||||
* @throws SearchException
|
||||
*/
|
||||
String getGmtPasswordModified(String userId) throws SearchException;
|
||||
}
|
||||
|
@ -26,6 +26,12 @@ import java.util.Map;
|
||||
*/
|
||||
public interface IUserService extends IUserBaseService, IUserCheckService {
|
||||
|
||||
/**
|
||||
* 密码验证
|
||||
*/
|
||||
String PASSWORD_VALIDITY_CUSTOM = "custom";
|
||||
String PASSWORD_VALIDITY_NONE = "none";
|
||||
String PASSWORD_VALIDITY = "passwordValidity";
|
||||
/**
|
||||
* 密码强度
|
||||
*/
|
||||
@ -33,6 +39,23 @@ public interface IUserService extends IUserBaseService, IUserCheckService {
|
||||
String PASSWORD_STRENGTH_WEAK = "weak";
|
||||
String PASSWORD_STRENGTH_MIDDLE = "middle";
|
||||
String PASSWORD_STRENGTH_STRONG = "strong";
|
||||
/**
|
||||
* 第一次登陆修改密码
|
||||
*/
|
||||
String FIRST_LOGIN_CHANGE_PASSWORD = "firstLoginChangePassword";
|
||||
String FIRST_LOGIN_CHANGE_PASSWORD_OPEN = "open";
|
||||
String FIRST_LOGIN_CHANGE_PASSWORD_CLOSE = "close";
|
||||
/**
|
||||
* 密码有效期
|
||||
*/
|
||||
String PASSWORD_VALIDITY_DAYS = "passwordValidityDays";
|
||||
/**
|
||||
* 密码提醒时间
|
||||
*/
|
||||
String CHANGE_PASSWORD_NOTICE_DAYS = "changePasswordNoticeDays";
|
||||
String PASSWORD_OK = "ok";
|
||||
String PASSWORD_CHANGE = "change";
|
||||
String PASSWORD_REMIND = "remind";
|
||||
|
||||
/**
|
||||
* 保存用户
|
||||
|
@ -6,8 +6,15 @@ import com.github.pagehelper.PageInfo;
|
||||
import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.exceptions.SearchException;
|
||||
import ink.wgink.exceptions.UpdateException;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.interfaces.manager.ISystemConfigManager;
|
||||
import ink.wgink.module.file.excel.error.AbstractErrorExcelHandler;
|
||||
import ink.wgink.module.file.service.IFileService;
|
||||
import ink.wgink.pojo.ListPage;
|
||||
import ink.wgink.pojo.dtos.user.UserDTO;
|
||||
import ink.wgink.pojo.result.SuccessResultData;
|
||||
import ink.wgink.pojo.result.SuccessResultList;
|
||||
import ink.wgink.pojo.result.UploadExcelResultDTO;
|
||||
import ink.wgink.service.user.dao.IUserDao;
|
||||
import ink.wgink.service.user.enums.UserUpdateTypeEnum;
|
||||
import ink.wgink.service.user.excel.UserExcel;
|
||||
@ -18,18 +25,15 @@ import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import ink.wgink.service.user.pojo.vos.*;
|
||||
import ink.wgink.service.user.service.IUserAdjustmentService;
|
||||
import ink.wgink.service.user.service.IUserService;
|
||||
import ink.wgink.pojo.ListPage;
|
||||
import ink.wgink.pojo.dtos.user.UserDTO;
|
||||
import ink.wgink.pojo.result.SuccessResultList;
|
||||
import ink.wgink.pojo.result.UploadExcelResultDTO;
|
||||
import ink.wgink.util.UUIDUtil;
|
||||
import ink.wgink.util.date.DateUtil;
|
||||
import ink.wgink.util.map.HashMapUtil;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.format.DateTimeFormat;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
@ -360,6 +364,61 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
return count(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SuccessResultData<String> getPasswordStatus(ISystemConfigManager systemConfigManager) {
|
||||
if (systemConfigManager == null) {
|
||||
return new SuccessResultData<>(PASSWORD_OK);
|
||||
}
|
||||
Map<String, Object> config = systemConfigManager.getConfig();
|
||||
String passwordValidity = PASSWORD_VALIDITY_CUSTOM;
|
||||
if (config.get(PASSWORD_VALIDITY) != null && !StringUtils.isBlank(config.get(PASSWORD_VALIDITY).toString())) {
|
||||
passwordValidity = config.get(PASSWORD_VALIDITY).toString();
|
||||
}
|
||||
// 密码永不过期
|
||||
if (StringUtils.equals(PASSWORD_VALIDITY_NONE, passwordValidity)) {
|
||||
return new SuccessResultData<>(PASSWORD_OK);
|
||||
}
|
||||
String firstLoginChangePassword = FIRST_LOGIN_CHANGE_PASSWORD_CLOSE;
|
||||
if (config.get(FIRST_LOGIN_CHANGE_PASSWORD) != null && !StringUtils.isBlank(config.get(FIRST_LOGIN_CHANGE_PASSWORD).toString())) {
|
||||
firstLoginChangePassword = config.get(FIRST_LOGIN_CHANGE_PASSWORD).toString();
|
||||
}
|
||||
String gmtPasswordModified = userDao.getGmtPasswordModified(securityComponent.getCurrentUser().getUserId());
|
||||
if (StringUtils.equals(FIRST_LOGIN_CHANGE_PASSWORD_OPEN, firstLoginChangePassword) && StringUtils.isBlank(gmtPasswordModified)) {
|
||||
return new SuccessResultData<>(PASSWORD_CHANGE);
|
||||
}
|
||||
DateTime gmtPasswordModifiedDateTime = null;
|
||||
if (!StringUtils.isBlank(gmtPasswordModified)) {
|
||||
gmtPasswordModifiedDateTime = DateTime.parse(gmtPasswordModified, DateTimeFormat.forPattern(ISystemConstant.DATE_FORMATTER_YYYY_MM_DD_HH_MM_SS));
|
||||
}
|
||||
// 密码有效时间
|
||||
int passwordValidityDays = 90;
|
||||
if (config.get(PASSWORD_VALIDITY_DAYS) != null && StringUtils.isBlank(config.get(PASSWORD_VALIDITY_DAYS).toString())) {
|
||||
passwordValidityDays = Integer.parseInt(config.get(PASSWORD_VALIDITY_DAYS).toString());
|
||||
}
|
||||
if (gmtPasswordModifiedDateTime == null) {
|
||||
return new SuccessResultData<>(PASSWORD_CHANGE);
|
||||
}
|
||||
DateTime nowDate = DateTime.now();
|
||||
// 到期时间
|
||||
DateTime expireGmtPasswordModifiedDateTime = gmtPasswordModifiedDateTime.plusDays(passwordValidityDays);
|
||||
if (expireGmtPasswordModifiedDateTime.compareTo(nowDate) <= 0) {
|
||||
return new SuccessResultData<>(PASSWORD_CHANGE);
|
||||
}
|
||||
// 提醒修改密码时间
|
||||
int changePasswordNoticeDays = 14;
|
||||
if (config.get(CHANGE_PASSWORD_NOTICE_DAYS) != null && StringUtils.isBlank(config.get(CHANGE_PASSWORD_NOTICE_DAYS).toString())) {
|
||||
changePasswordNoticeDays = Integer.parseInt(config.get(CHANGE_PASSWORD_NOTICE_DAYS).toString());
|
||||
}
|
||||
if (changePasswordNoticeDays >= passwordValidityDays) {
|
||||
return new SuccessResultData<>(PASSWORD_OK);
|
||||
}
|
||||
DateTime noticeDateTime = expireGmtPasswordModifiedDateTime.minusDays(changePasswordNoticeDays);
|
||||
if (noticeDateTime.compareTo(nowDate) <= 0) {
|
||||
return new SuccessResultData<>(PASSWORD_REMIND);
|
||||
}
|
||||
return new SuccessResultData<>(PASSWORD_OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* Excel导入错误对象
|
||||
*
|
||||
|
@ -456,4 +456,16 @@
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<!-- 密码修改时间 -->
|
||||
<select id="getGmtPasswordModified" parameterType="java.lang.String" resultType="java.lang.String">
|
||||
SELECT
|
||||
LEFT(gmt_password_modified, 19)
|
||||
FROM
|
||||
sys_user
|
||||
WHERE
|
||||
is_delete = 0
|
||||
AND
|
||||
user_id = #{userId}
|
||||
</select>
|
||||
|
||||
</mapper>
|
Loading…
Reference in New Issue
Block a user