(feat)账号首次登录是否需要修改密码,登录逻辑优化

yun-zuoyi
nies 3 years ago
parent 98d428ad4b
commit 918b9b9e9c

@ -4,6 +4,7 @@ import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.shirotoken.BaseToken;
import cn.estsh.i3plus.pojo.platform.bean.*;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authc.AuthenticationException;
@ -27,7 +28,7 @@ public interface ISysUserService {
* @return
*/
@ApiOperation(value = "账号登录", notes = "普通账号登录功能")
SessionUser loginUser(String loginName, String password, String languageCode, Integer loginPlatform, String deviceId) throws AuthenticationException;
ResultBean<SessionUser> loginUser(String loginName, String password, String languageCode, Integer loginPlatform, String deviceId) throws AuthenticationException;
@ApiOperation(value = "获取Token", notes = "根据登录名判断是否是管理员")
BaseToken getToken(String loginName, String password, String languageCode, Integer loginPlatform);
@ -92,6 +93,23 @@ public interface ISysUserService {
void refreshUserLoginInformation(Long userId);
/**
*
*
* @param userId
*/
@ApiOperation(value = "首次登录重置账号登录次数", notes = "首次登录重置账号登录次数")
void updateUserLoginNum(Long userId,Integer userLoginNum);
/**
*
*
* @param userId
*/
@ApiOperation(value = "刷新账号登录时间信息", notes = "刷新账号登录时间信息")
void refreshUserLoginDateTime(Long userId,Long userInfoId);
/**
*
*
* @param sysUser

@ -46,6 +46,8 @@ public class NameUserAuthRealm extends AuthorizingRealm {
//管理员令牌
SessionUser sessionUser = systemLoginService.queryCheckNameUserLogin((UserToken) authenticationToken);
LOGGER.info("用户令牌验证:{}", sessionUser);
//todo:shiro 用法可能有问题, SimpleAuthenticationInfo这里的参数应该为 user信息或者username, 密码, realm name,这里没传密码传的是用户名
//没有用shiro的验证方式走的是自己的密码验证逻辑
return new SimpleAuthenticationInfo(sessionUser, ((UserToken) authenticationToken).getLoginName(), this.getName());
} catch (Exception e) {
e.printStackTrace();

@ -433,11 +433,16 @@ public class WhiteController extends CoreBaseController {
userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR;
LOGGER.warn("Impp业务异常Exception 登录失败 ", e);
} finally {
if (result != null && !result.isSuccess() ){
if(CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS.getValue() == userLoginStatus.getValue()){
userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR;
}
}
// 记录登录记录
recordSysUserLog(null, loginModel.getLoginName(), userLoginStatus.getValue());
}
LOGGER.info("会员{}登陆登录完成 ,语言:{} , 登录耗时:{}", loginModel.getLoginName(), BaseThreadLocal.getThreadLanguageCode(), (System.currentTimeMillis() - startTime));
LOGGER.info("会员{}登陆登录完成,登录{},语言:{} , 登录耗时:{}", loginModel.getLoginName(),result.isSuccess()? "成功":"失败", BaseThreadLocal.getThreadLanguageCode(), (System.currentTimeMillis() - startTime));
return result;
}

@ -116,14 +116,18 @@ public class PersonnelController extends CoreBaseController {
}
info.setUserInfoStatus(CommonEnumUtil.USER_INFO_STATUS.INCUMBENT.getValue());
info.setUserLoginNum(0);
if (info.getUserLoginNum() == null){
info.setUserLoginNum(0);
}
info.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue());
ConvertBean.modelInitialize(info, AuthUtil.getSessionUser());
user.setUserType(CommonEnumUtil.USER_TYPE.USER.getValue());
user.setUserStatus(CommonEnumUtil.USER_STATUS.ENABLE.getValue());
user.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue());
user.setUserLoginNum(0);
if (user.getUserLoginNum() == null){
user.setUserLoginNum(0);
}
ConvertBean.modelInitialize(user, AuthUtil.getSessionUser());
SysDepartment infoDepartment = departmentService.get(Long.parseLong(model.getInfoDepartmentId()));
@ -144,6 +148,7 @@ public class PersonnelController extends CoreBaseController {
info.setOrganizeCode(infoOrganize.getOrganizeCode());
info.setPositionId(position.getId());
info.setPositionNameRdd(position.getName());
info.setUserLoginLastDateTime(TimeTool.getNowTime(true));
personnelService.saveSysUserInfo(info);
user.setDepartmentId(userDepartment.getId());
@ -151,6 +156,7 @@ public class PersonnelController extends CoreBaseController {
user.setOrganizeId(userOrganize.getId());
user.setOrganizeNameRdd(userOrganize.getName());
user.setOrganizeCode(userOrganize.getOrganizeCode());
user.setUserLoginLastDateTime(TimeTool.getNowTime(true));
user.setUserInfoId(info.getId());
//松下需要创建的新用户 第一次登陆系统就要重置密码
// user.setUserPasswordLastModifyTime(TimeTool.getNowTime(true));

@ -846,4 +846,5 @@ public class SysUserController extends CoreBaseController {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -20,6 +20,7 @@ import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import cn.estsh.impp.framework.boot.util.ImppSwitchUtil;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authc.CredentialsException;
@ -248,7 +249,15 @@ public class SystemLoginService implements ISystemLoginService {
}
if (StringUtils.equals(passwordStr, SysUserPasswordUtil.encoder(pwd))) {
userPasswordUtil.checkSysUserLogin(user);
// ResultBean resultBean = userPasswordUtil.checkSysUserLogin(user);
// if (!resultBean.isSuccess()) {
// throw ImppExceptionBuilder.newInstance()
// .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
// .setErrorCode(resultBean.getCode())
// .setErrorDetail(resultBean.getErrorMsg())
// .setErrorSolution("请联系系统管理员")
// .build();
// }
return user;
}
LOGGER.error("密码验证错误。");
@ -270,7 +279,16 @@ public class SystemLoginService implements ISystemLoginService {
return user;
}
userPasswordUtil.checkSysUserLogin(user);
// ResultBean resultBean = userPasswordUtil.checkSysUserLogin(user);
// if (!resultBean.isSuccess()) {
// throw ImppExceptionBuilder.newInstance()
// .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
// .setErrorCode(resultBean.getCode())
// .setErrorDetail(resultBean.getErrorMsg())
// .setErrorSolution("请联系系统管理员")
// .build();
// }
return user;
}

@ -75,13 +75,24 @@ public class DefaultLoginStrategy implements ISystemLoginStrategyService {
userService.validatePasswordByLoginNameAndReturnUser(loginModel.getLoginName(),loginModel.getLoginPwd());
validatePasswordIsExpired(loginModel.getLoginName());
SessionUser user = userService.loginUser(
ResultBean<SessionUser> tempResult = userService.loginUser(
loginModel.getLoginName().trim(),
loginModel.getLoginPwd().trim(),
loginModel.getLanguageCode(),
loginService.getLoginPlatform(request).getValue(),
loginModel.getDeviceId()
);
if (!tempResult.isSuccess() || null == tempResult.getResultObject() ){
return tempResult;
}
SessionUser user = tempResult.getResultObject();
// SessionUser user = userService.loginUser(
// loginModel.getLoginName().trim(),
// loginModel.getLoginPwd().trim(),
// loginModel.getLanguageCode(),
// loginService.getLoginPlatform(request).getValue(),
// loginModel.getDeviceId()
// );
String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getUser().getId();
redisCore.deleteKey(redisKey);

@ -74,13 +74,24 @@ public class E9LoginStrategy implements ISystemLoginStrategyService {
AuthUtil.logout();
}
SessionUser user = userService.loginUser(
loginModel.getLoginName().trim(),
// SessionUser user = userService.loginUser(
// loginModel.getLoginName().trim(),
// loginModel.getLoginName().trim(),
// loginModel.getLanguageCode(),
// loginService.getLoginPlatform(request).getValue(),
// loginModel.getDeviceId()
// );
ResultBean<SessionUser> tempResult = userService.loginUser(
loginModel.getLoginName().trim(),
loginModel.getLoginPwd().trim(),
loginModel.getLanguageCode(),
loginService.getLoginPlatform(request).getValue(),
loginModel.getDeviceId()
);
if (!tempResult.isSuccess() || null == tempResult.getResultObject() ){
return tempResult;
}
SessionUser user = tempResult.getResultObject();
String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getUser().getId();
redisCore.deleteKey(redisKey);

@ -70,13 +70,17 @@ public class NameLoginStrategy implements ISystemLoginStrategyService {
AuthUtil.logout();
}
SessionUser user = userService.loginUser(
loginModel.getLoginName().trim(),
ResultBean<SessionUser> tempResult = userService.loginUser(
loginModel.getLoginName().trim(),
loginModel.getLoginPwd().trim(),
loginModel.getLanguageCode(),
loginService.getLoginPlatform(request).getValue(),
loginModel.getDeviceId()
);
if (!tempResult.isSuccess() || null == tempResult.getResultObject() ){
return tempResult;
}
SessionUser user = tempResult.getResultObject();
String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getUser().getId();
redisCore.deleteKey(redisKey);

@ -140,12 +140,17 @@ public class SysUserSavePasswordService extends CrudService<SysUserPassword> imp
user.setUserLoginPassword(newPwd);
userPasswordUtil.checkPasswordSave(user);
userPasswordRDao.updateByProperties(
new String[]{"userId", "isDeleted"},
new Object[]{user.getId(), CommonEnumUtil.IS_DEAL.NO.getValue()},
new String[]{"isDeleted", "modifyDatetime", "modifyUser"},
new Object[]{
CommonEnumUtil.IS_DEAL.YES.getValue(), TimeTool.getNowTime(true), loginName});
//如果是首次登录修改密码则设置登录次数为1
if(null == user.getUserLoginNum() || user.getUserLoginNum() == 0){
userService.updateUserLoginNum(user.getId(),1);
}
userPasswordRDao.updateByProperties(
new String[]{"userId", "isDeleted"},
new Object[]{user.getId(), CommonEnumUtil.IS_DEAL.NO.getValue()},
new String[]{"isDeleted", "modifyDatetime", "modifyUser",},
new Object[]{
CommonEnumUtil.IS_DEAL.YES.getValue(), TimeTool.getNowTime(true), loginName});
SysUserPassword pwd = new SysUserPassword();
pwd.setUserId(user.getId());

@ -13,14 +13,12 @@ import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken;
import cn.estsh.i3plus.pojo.base.shirotoken.BaseToken;
import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken;
import cn.estsh.i3plus.pojo.base.shirotoken.UserToken;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.tool.HqlPack;
import cn.estsh.i3plus.pojo.mdm.sqlpack.DdlMdmBusiPreparedPack;
import cn.estsh.i3plus.pojo.platform.bean.*;
import cn.estsh.i3plus.pojo.platform.repository.SysLogUserLoginRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysRefUserDepartmentRepository;
@ -30,6 +28,7 @@ import cn.estsh.i3plus.pojo.platform.repository.SysUserInfoRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository;
import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import cn.estsh.impp.framework.boot.util.RedisCacheTool;
@ -129,25 +128,56 @@ public class SysUserService implements ISysUserService {
@Override
@ApiOperation(value = "用户登录", notes = "用户登录功能实现")
@Transactional(propagation = Propagation.REQUIRED)
public SessionUser loginUser(String loginName, String password, String languageCode, Integer loginPlatform, String deviceId) throws AuthenticationException {
public ResultBean<SessionUser> loginUser(String loginName, String password, String languageCode, Integer loginPlatform, String deviceId) throws AuthenticationException {
LOGGER.debug("平台用户 SYS_USER loginName:{} \t password:{} \t languageCode:{}", loginName, password, languageCode);
BaseToken token = getToken(loginName, password, languageCode, loginPlatform);
SessionUser sessionUser = AuthUtil.login(token);
SysUser user = this.getSysUserByLoginName(loginName);
if (user == null) {
throw new CredentialsException("用户不存在");
}
// 判断会话模式
checkSessionMode(loginPlatform, user.getId());
SessionUser sessionUser = null;
SysUser user = null;
ResultBean resultBean = ResultBean.fail();
try {
BaseToken token = getToken(loginName, password, languageCode, loginPlatform);
user = this.getSysUserByLoginName(loginName);
if (user == null) {
throw new CredentialsException("用户不存在");
}
//校验 用户
ResultBean result = passwordUtil.checkSysUserLogin(user);
if (!result.isSuccess()) {
resultBean = result;
return resultBean;
}
sessionUser = AuthUtil.login(token);
packSessionUser(sessionUser, user, user.getUserType(), loginPlatform, languageCode, deviceId);
packConfigSessionUser(sessionUser, user);
AuthUtil.setSessionUser(sessionUser);
refreshUserLoginInformation(user.getId());
AuthUtil.online(sessionUser);
// 判断会话模式
checkSessionMode(loginPlatform, user.getId());
return sessionUser;
packSessionUser(sessionUser, user, user.getUserType(), loginPlatform, languageCode, deviceId);
packConfigSessionUser(sessionUser, user);
AuthUtil.setSessionUser(sessionUser);
AuthUtil.online(sessionUser);
resultBean = ResultBean.success().setResultObject(sessionUser);
} catch (CredentialsException e) {
e.printStackTrace();
resultBean = ResultBean.fail(e);
} catch (ImppBusiException e) {
e.printStackTrace();
resultBean = ResultBean.fail(e);
} catch (Exception e) {
e.printStackTrace();
resultBean = ResultBean.fail(e);
} finally {
//如果登录成功,刷新登录成功次数和上次登录时间
if (resultBean.isSuccess()){
this.refreshUserLoginInformation(user.getId());
}else{
//如果登录不成功,且有这个用户,就只刷新上次用户的登录时间。
if (!ObjectUtils.isEmpty(user) && !ObjectUtils.isEmpty(user.getId())) {
this.refreshUserLoginDateTime(user.getId(), user.getUserInfoId());
}
}
}
return resultBean;
}
private void checkSessionMode(Integer loginPlatform, Long userId) {
@ -303,6 +333,29 @@ public class SysUserService implements ISysUserService {
}
@Override
public void updateUserLoginNum(Long userId,Integer loginNum) {
SysUser user = userRDao.getById(userId);
user.setUserLoginNum(loginNum);
userRDao.save(user);
DdlPackBean userInfoDdlPackBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getNumEqualPack(user.getUserInfoId(), "id", userInfoDdlPackBean);
sysUserInfoRDao.updateByProperties(new String[]{"userLoginNum"}, new Object[]{loginNum},userInfoDdlPackBean);
}
@Override
public void refreshUserLoginDateTime(Long userId, Long userInfoId) {
DdlPackBean userDdlPackBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getNumEqualPack(userId, "id", userDdlPackBean);
userRDao.updateByProperties(new String[]{"userLoginLastDateTime"}, new Object[]{TimeTool.getNowTime(true)}, userDdlPackBean);
DdlPackBean userInfoDdlPackBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getNumEqualPack(userInfoId, "id", userInfoDdlPackBean);
sysUserInfoRDao.updateByProperties(new String[]{"userLoginLastDateTime"}, new Object[]{TimeTool.getNowTime(true)}, userInfoDdlPackBean);
}
@Override
@ApiOperation(value = "新增账号", notes = "新增账号信息")
public SysUser insertSysUser(SysUser sysUser) throws Exception {
LOGGER.debug("平台用户 SYS_USER SysUser:{}", sysUser);

@ -279,6 +279,14 @@ public class MailUtil {
}
if (smtpStarttlsEnabled) {
server.put("mail.smtp.starttls.enable", "true");
// server.put("mail.smtp.ssl.protocols","TLSv1.2");
// server.put("mail.debug","true"); //开启mail debug日志
// server.put("mail.smtp.ssl.protocols","TLSv1.2");
// server.put("mail.debug","true");
// server.put("mail.smtp.auth.mechanisms","NTLM");
// server.put("mail.smtp.auth.mechanisms","PLAIN");
// server.put("mail.smtp.auth.mechanisms","DIGEST-MD5");
}
Session conn = Session.getInstance(server, null);

@ -54,10 +54,11 @@ public class SysUserPasswordUtil {
/**
*
*
* @param password
* @return
*/
public static final String encoder(String password){
public static final String encoder(String password) {
try {
return EncryptTool.hexMD5(password);
} catch (NoSuchAlgorithmException e) {
@ -215,8 +216,8 @@ public class SysUserPasswordUtil {
for (char ch : chars) {
// Chart ASCLL 编码比对 特殊字符
if ((ch >= 32 && ch <= 47)|| (ch >= 58 && ch <= 64)||
(ch >= 91 && ch <= 96)|| (ch >= 123 && ch <= 126)) {
if ((ch >= 32 && ch <= 47) || (ch >= 58 && ch <= 64) ||
(ch >= 91 && ch <= 96) || (ch >= 123 && ch <= 126)) {
++num;
}
}
@ -270,9 +271,12 @@ public class SysUserPasswordUtil {
int lastDay = Integer.MAX_VALUE;
if (CollectionUtils.isNotEmpty(passwords)) {
for (SysUserPassword password : passwords) {
int day = TimeTool.getSecoundsBetweenTime(4, password.getCreateDatetime(), TimeTool.getNowTime(true));
if (day < lastDay) {
lastDay = day;
//防止日期转换错误
if (StringUtils.isNotBlank(password.getCreateDatetime())){
int day = TimeTool.getSecoundsBetweenTime(4, password.getCreateDatetime(), TimeTool.getNowTime(true));
if (day < lastDay) {
lastDay = day;
}
}
}
}
@ -307,47 +311,66 @@ public class SysUserPasswordUtil {
try {
for (String compile : split) {
if(StringUtils.isNotBlank(compile)){
if (StringUtils.isNotBlank(compile)) {
if (!Pattern.compile(compile).matcher(content).find()) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode())
.setErrorDetail("正则【"+compile+"】密码校验不通过")
.setErrorDetail("正则【" + compile + "】密码校验不通过")
.setErrorSolution("请重新输入")
.build();
}
}
}
}catch (ImppBusiException e){
} catch (ImppBusiException e) {
// 业务异常 抛出
throw e;
}catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
}
}
}
/******************************************** 用户登录密码检查 ********************************************/
public void checkSysUserLogin(SysUser user) {
if(ImppSwitchUtil.isLoginActiveDirectory()){
public ResultBean checkSysUserLogin(SysUser user) {
if (ImppSwitchUtil.isLoginActiveDirectory()) {
// 使用AD域账号登录
checkActiveDirectory(user);
}else{
try {
checkActiveDirectory(user);
} catch (ImppBusiException e) {
e.printStackTrace();
return ResultBean.fail(e);
}catch (Exception e){
return ResultBean.fail(e);
}
} else {
/* 检查密码有效期 */
checkLoginPasswordTimeOut(user);
ResultBean result = checkLoginPasswordTimeOut(user);
if(!result.isSuccess()){
return result;
}
/* 登录 长时间未登录锁定 */
checkLoginTimeOut(user);
result = checkLoginTimeOut(user);
if(!result.isSuccess()){
return result;
}
/* 判断是否第一次登录 */
result = checkFirstLoginChangePwd(user);
if(!result.isSuccess()){
return result;
}
}
return ResultBean.success();
}
/**
* ActiveDirectory
*
* @param user
*/
public void checkActiveDirectory(SysUser user) {
if(ImppSwitchUtil.isLoginActiveDirectory()){
if (ImppSwitchUtil.isLoginActiveDirectory()) {
String activeDirectoryUrl = RedisCacheTool.getSysConfigStrVal(CommonConstWords.CONFIG_PWD_ACTIVE_DIRECTORY_URL);
if (StringUtils.isNotBlank(activeDirectoryUrl)) {
@ -374,7 +397,7 @@ public class SysUserPasswordUtil {
.setErrorSolution("请重新操作")
.build();
}
}else{
} else {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode())
@ -390,13 +413,14 @@ public class SysUserPasswordUtil {
*/
public void checkLoginErrorNumber(String loginName, ResultBean resultBean, Exception e) {
SysUser user = userService.getSysUserByLoginName(loginName);
if(Objects.nonNull(user)){
if (Objects.nonNull(user)) {
checkLoginErrorNumber(user.getId(), resultBean, e);
}
}
/**
*
*
* @param userId
* @param resultBean
* @param e
@ -409,14 +433,14 @@ public class SysUserPasswordUtil {
String redisKey = CommonConstWords.USER_LOGIN_ERROR + ":" + today + ":" + userId;
try {
Object redisValue = redisCore.getObject(redisKey);
if(Objects.nonNull(redisValue)){
loginErrorNumber = (Integer)redisValue;
if (Objects.nonNull(redisValue)) {
loginErrorNumber = (Integer) redisValue;
}
}catch (Exception exception){
} catch (Exception exception) {
LOGGER.error("获取登录异常次数错误,错误信息:{}", exception.getMessage());
}
if(Objects.equals(loginErrorNumberMax,loginErrorNumber)){
if (Objects.equals(loginErrorNumberMax, loginErrorNumber)) {
// 锁定账号信息
userService.doLockSysUserById(userId);
@ -426,7 +450,7 @@ public class SysUserPasswordUtil {
.setErrorDetail("账号已被锁定")
.setErrorSolution("请联系系统管理员")
.build();
}else if(loginErrorNumber > loginErrorNumberMax){
} else if (loginErrorNumber > loginErrorNumberMax) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode())
@ -436,82 +460,133 @@ public class SysUserPasswordUtil {
}
// 登录异常 更新登录失败次数
if(Objects.nonNull(e)){
if (Objects.nonNull(e)) {
++loginErrorNumber;
if(Objects.nonNull(resultBean)){
if (Objects.nonNull(resultBean)) {
int num = loginErrorNumberMax - loginErrorNumber;
if(num == 0){
if (num == 0) {
resultBean.setErrorMsg(LocaleUtils.getLocaleRes("密码输入错误。用户已被锁定请联系管理员!"));
}else{
} else {
resultBean.setErrorMsg(String.format(LocaleUtils.getLocaleRes("密码输入错误。再输入错误 %s 次,用户将被锁定"), num));
}
}
redisCore.putObject(redisKey,loginErrorNumber,CommonConstWords.REDIS_TIME_DAY_ONE);
redisCore.putObject(redisKey, loginErrorNumber, CommonConstWords.REDIS_TIME_DAY_ONE);
}
}
/**
*
*/
private void checkLoginPasswordTimeOut(SysUser user) {
private ResultBean checkLoginPasswordTimeOut(SysUser user) {
try {
int passwordDayMax = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_PWD_VALID_DAY, CommonConstWords.CONFIG_PWD_VALID_DAY_DEFAULT);
if(passwordDayMax > 0){
if (passwordDayMax > 0) {
SysUserPassword password = userPasswordService.get(user.getUserLoginPasswordId());
if(Objects.nonNull(password)){
if (Objects.nonNull(password) && StringUtils.isNotBlank(password.getCreateDatetime())) {
int day = TimeTool.getSecoundsBetweenTime(4, password.getCreateDatetime(), TimeTool.getNowTime(true));
if(day > passwordDayMax){
if (day > passwordDayMax) {
// 锁定账号信息
userService.doLockSysUserById(user.getId());
throw ImppExceptionBuilder.newInstance()
// throw ImppExceptionBuilder.newInstance()
// .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
// .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode())
// .setErrorDetail("账号密码已过期")
// .setErrorSolution("请联系系统管理员")
// .build();
ImppBusiException exception = ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode())
.setErrorDetail("账号密码已过期")
.setErrorSolution("请联系系统管理员")
.build();
return ResultBean.fail(exception);
}
}
}
}catch (ImppBusiException e){
throw e;
}catch (Exception e){
} catch (ImppBusiException e) {
// throw e;
e.printStackTrace();
return ResultBean.fail(e);
} catch (Exception e) {
LOGGER.error("密码有效期处理异常,异常信息:{}", e.getMessage());
e.printStackTrace();
return ResultBean.fail(e);
}
return ResultBean.success();
}
/**
*
*/
private void checkLoginTimeOut(SysUser user) {
private ResultBean checkLoginTimeOut(SysUser user) {
try {
if (StringUtils.isBlank(user.getUserLoginLastDateTime())){
return ResultBean.success("上次登录时间为空");
}
int loginDayMax = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_USER_LOGIN_DAY_OUT, CommonConstWords.CONFIG_USER_LOGIN_DAY_OUT_DEFAULT);
if(loginDayMax > 0){
if (loginDayMax > 0) {
int day = TimeTool.getSecoundsBetweenTime(4, user.getUserLoginLastDateTime(), TimeTool.getNowTime(true));
if(day > loginDayMax){
if (day > loginDayMax) {
// 锁定账号信息
//todo: 账户没有被锁定,由于异常事务回滚,导致账户没有被锁定,这个更新操作就是多余的
userService.doLockSysUserById(user.getId());
throw ImppExceptionBuilder.newInstance()
// throw ImppExceptionBuilder.newInstance()
// .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
// .setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode())
// .setErrorDetail("长时间未登录账号已被锁定")
// .setErrorSolution("请联系系统管理员")
// .build();
ImppBusiException exception = ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode())
.setErrorDetail("长时间未登录账号已被锁定")
.setErrorSolution("请联系系统管理员")
.build();
return ResultBean.fail(exception);
}
}
}catch (ImppBusiException e){
throw e;
}catch (Exception e){
LOGGER.error("密码有效期处理异常,异常信息:{}", e.getMessage());
} catch (ImppBusiException e) {
// throw e;
e.printStackTrace();
return ResultBean.fail(e);
} catch (Exception e) {
LOGGER.error("长时间未登录处理异常,异常信息:{}", e.getMessage());
e.printStackTrace();
return ResultBean.fail(e);
}
return ResultBean.success();
}
/**
*
*/
private ResultBean checkFirstLoginChangePwd(SysUser user) {
try {
int firstLoginChangePwd = RedisCacheTool.getSysConfigIntVal(CommonConstWords.FIRST_LOGIN_CHANGE_PWD_SWITCH_KEY, CommonConstWords.FIRST_LOGIN_CHANGE_PWD_SWITCH_DEFAULT_VALUE);
if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == firstLoginChangePwd) {
if (null == user.getUserLoginNum() || user.getUserLoginNum() <= 0) {
return ResultBean.fail()
.setCode(ImppExceptionEnum.LOGIN_EXCEPTION_CHANGE_PWD.getCode())
.setErrorMsg(ImppExceptionEnum.LOGIN_EXCEPTION_CHANGE_PWD.getDescription());
}
}
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
LOGGER.error("首次登录验证出错,异常信息:{}", e.getMessage());
e.printStackTrace();
return ResultBean.fail(e);
}
return ResultBean.success();
}
}

@ -1,5 +1,5 @@
#\u4F7F\u7528\u914D\u7F6E
spring.profiles.active=docker
spring.profiles.active=test
#\u9879\u76EE\u63CF\u8FF0\u4FE1\u606F\uFF08swagger\u4E2D\u663E\u5F0F\uFF09\uFF0C\u4E2D\u6587\u4F7F\u7528uncode\u8F6C\u7801
desc.application.name=\u6838\u5FC3\u7BA1\u7406\u540E\u53F0

Loading…
Cancel
Save