|
|
|
|
@@ -16,6 +16,7 @@ import com.ruoyi.common.core.domain.model.XcxLoginUser;
|
|
|
|
|
import com.ruoyi.common.enums.DeviceType;
|
|
|
|
|
import com.ruoyi.common.enums.LoginType;
|
|
|
|
|
import com.ruoyi.common.enums.UserStatus;
|
|
|
|
|
import com.ruoyi.common.enums.UserType;
|
|
|
|
|
import com.ruoyi.common.exception.user.CaptchaException;
|
|
|
|
|
import com.ruoyi.common.exception.user.CaptchaExpireException;
|
|
|
|
|
import com.ruoyi.common.exception.user.UserException;
|
|
|
|
|
@@ -69,7 +70,7 @@ public class SysLoginService {
|
|
|
|
|
boolean captchaEnabled = configService.selectCaptchaEnabled();
|
|
|
|
|
// 验证码开关
|
|
|
|
|
if (captchaEnabled) {
|
|
|
|
|
validateCaptcha(username, code, uuid);
|
|
|
|
|
validateCaptcha(username, UserType.SYS_USER.getUserType(), code, uuid);
|
|
|
|
|
}
|
|
|
|
|
// 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可
|
|
|
|
|
SysUser user = loadUserByUsername(username);
|
|
|
|
|
@@ -79,7 +80,7 @@ public class SysLoginService {
|
|
|
|
|
// 生成token
|
|
|
|
|
LoginHelper.loginByDevice(loginUser, DeviceType.PC);
|
|
|
|
|
|
|
|
|
|
recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
|
|
|
|
|
recordLogininfor(username,loginUser.getUserType(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
|
|
|
|
|
recordLoginInfo(user.getUserId(), username);
|
|
|
|
|
return StpUtil.getTokenValue();
|
|
|
|
|
}
|
|
|
|
|
@@ -94,7 +95,7 @@ public class SysLoginService {
|
|
|
|
|
// 生成token
|
|
|
|
|
LoginHelper.loginByDevice(loginUser, DeviceType.APP);
|
|
|
|
|
|
|
|
|
|
recordLogininfor(user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
|
|
|
|
|
recordLogininfor(user.getUserName(),UserType.SYS_USER.getUserType(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
|
|
|
|
|
recordLoginInfo(user.getUserId(), user.getUserName());
|
|
|
|
|
return StpUtil.getTokenValue();
|
|
|
|
|
}
|
|
|
|
|
@@ -109,7 +110,7 @@ public class SysLoginService {
|
|
|
|
|
// 生成token
|
|
|
|
|
LoginHelper.loginByDevice(loginUser, DeviceType.APP);
|
|
|
|
|
|
|
|
|
|
recordLogininfor(user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
|
|
|
|
|
recordLogininfor(user.getUserName(),UserType.SYS_USER.getUserType(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
|
|
|
|
|
recordLoginInfo(user.getUserId(), user.getUserName());
|
|
|
|
|
return StpUtil.getTokenValue();
|
|
|
|
|
}
|
|
|
|
|
@@ -132,7 +133,7 @@ public class SysLoginService {
|
|
|
|
|
// 生成token
|
|
|
|
|
LoginHelper.loginByDevice(loginUser, DeviceType.XCX);
|
|
|
|
|
|
|
|
|
|
recordLogininfor(user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
|
|
|
|
|
recordLogininfor(user.getUserName(), UserType.SYS_USER.getUserType(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
|
|
|
|
|
recordLoginInfo(user.getUserId(), user.getUserName());
|
|
|
|
|
return StpUtil.getTokenValue();
|
|
|
|
|
}
|
|
|
|
|
@@ -143,7 +144,7 @@ public class SysLoginService {
|
|
|
|
|
public void logout() {
|
|
|
|
|
try {
|
|
|
|
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
|
|
|
|
recordLogininfor(loginUser.getUsername(), Constants.LOGOUT, MessageUtils.message("user.logout.success"));
|
|
|
|
|
recordLogininfor(loginUser.getUsername(), loginUser.getUserType(), Constants.LOGOUT, MessageUtils.message("user.logout.success"));
|
|
|
|
|
} catch (NotLoginException ignored) {
|
|
|
|
|
} finally {
|
|
|
|
|
try {
|
|
|
|
|
@@ -160,9 +161,10 @@ public class SysLoginService {
|
|
|
|
|
* @param status 状态
|
|
|
|
|
* @param message 消息内容
|
|
|
|
|
*/
|
|
|
|
|
public void recordLogininfor(String username, String status, String message) {
|
|
|
|
|
public void recordLogininfor(String username, String userType, String status, String message) {
|
|
|
|
|
LogininforEvent logininforEvent = new LogininforEvent();
|
|
|
|
|
logininforEvent.setUsername(username);
|
|
|
|
|
logininforEvent.setUserType(userType);
|
|
|
|
|
logininforEvent.setStatus(status);
|
|
|
|
|
logininforEvent.setMessage(message);
|
|
|
|
|
logininforEvent.setRequest(ServletUtils.getRequest());
|
|
|
|
|
@@ -175,7 +177,7 @@ public class SysLoginService {
|
|
|
|
|
private boolean validateSmsCode(String phonenumber, String smsCode) {
|
|
|
|
|
String code = RedisUtils.getCacheObject(CacheConstants.CAPTCHA_CODE_KEY + phonenumber);
|
|
|
|
|
if (StringUtils.isBlank(code)) {
|
|
|
|
|
recordLogininfor(phonenumber, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
|
|
|
|
|
recordLogininfor(phonenumber, UserType.SYS_USER.getUserType(), Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
|
|
|
|
|
throw new CaptchaExpireException();
|
|
|
|
|
}
|
|
|
|
|
return code.equals(smsCode);
|
|
|
|
|
@@ -187,7 +189,7 @@ public class SysLoginService {
|
|
|
|
|
private boolean validateEmailCode(String email, String emailCode) {
|
|
|
|
|
String code = RedisUtils.getCacheObject(CacheConstants.CAPTCHA_CODE_KEY + email);
|
|
|
|
|
if (StringUtils.isBlank(code)) {
|
|
|
|
|
recordLogininfor(email, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
|
|
|
|
|
recordLogininfor(email, UserType.SYS_USER.getUserType(), Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
|
|
|
|
|
throw new CaptchaExpireException();
|
|
|
|
|
}
|
|
|
|
|
return code.equals(emailCode);
|
|
|
|
|
@@ -200,16 +202,16 @@ public class SysLoginService {
|
|
|
|
|
* @param code 验证码
|
|
|
|
|
* @param uuid 唯一标识
|
|
|
|
|
*/
|
|
|
|
|
public void validateCaptcha(String username, String code, String uuid) {
|
|
|
|
|
public void validateCaptcha(String username, String userType, String code, String uuid) {
|
|
|
|
|
String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.defaultString(uuid, "");
|
|
|
|
|
String captcha = RedisUtils.getCacheObject(verifyKey);
|
|
|
|
|
RedisUtils.deleteObject(verifyKey);
|
|
|
|
|
if (captcha == null) {
|
|
|
|
|
recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
|
|
|
|
|
recordLogininfor(username, userType, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
|
|
|
|
|
throw new CaptchaExpireException();
|
|
|
|
|
}
|
|
|
|
|
if (!code.equalsIgnoreCase(captcha)) {
|
|
|
|
|
recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"));
|
|
|
|
|
recordLogininfor(username, userType, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"));
|
|
|
|
|
throw new CaptchaException();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -312,7 +314,7 @@ public class SysLoginService {
|
|
|
|
|
int errorNumber = ObjectUtil.defaultIfNull(RedisUtils.getCacheObject(errorKey), 0);
|
|
|
|
|
// 锁定时间内登录 则踢出
|
|
|
|
|
if (errorNumber >= maxRetryCount) {
|
|
|
|
|
recordLogininfor(username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime));
|
|
|
|
|
recordLogininfor(username, loginFail, UserType.SYS_USER.getUserType(), MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime));
|
|
|
|
|
throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -322,11 +324,11 @@ public class SysLoginService {
|
|
|
|
|
RedisUtils.setCacheObject(errorKey, errorNumber, Duration.ofMinutes(lockTime));
|
|
|
|
|
// 达到规定错误次数 则锁定登录
|
|
|
|
|
if (errorNumber >= maxRetryCount) {
|
|
|
|
|
recordLogininfor(username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime));
|
|
|
|
|
recordLogininfor(username, UserType.SYS_USER.getUserType(), loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime));
|
|
|
|
|
throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime);
|
|
|
|
|
} else {
|
|
|
|
|
// 未达到规定错误次数
|
|
|
|
|
recordLogininfor(username, loginFail, MessageUtils.message(loginType.getRetryLimitCount(), errorNumber));
|
|
|
|
|
recordLogininfor(username, UserType.SYS_USER.getUserType(), loginFail, MessageUtils.message(loginType.getRetryLimitCount(), errorNumber));
|
|
|
|
|
throw new UserException(loginType.getRetryLimitCount(), errorNumber);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|