提交 5ff006d3 authored 作者: hzh's avatar hzh

登录日志修改

上级 f735339a
......@@ -36,6 +36,11 @@ public class RemoteLogininforBo implements Serializable {
*/
private String userName;
/**
* 用户类型
*/
private String userType;
/**
* 客户端
*/
......
......@@ -75,6 +75,7 @@ public class UserActionListener implements SaTokenListener {
logininforEvent.setTenantId(tenantId);
logininforEvent.setUsername(username);
logininforEvent.setStatus(Constants.LOGIN_SUCCESS);
logininforEvent.setUserType((String) loginModel.getExtra(LoginHelper.USER_TYPE));
logininforEvent.setMessage(MessageUtils.message("user.login.success"));
SpringUtils.context().publishEvent(logininforEvent);
// 更新登录信息
......
......@@ -126,7 +126,7 @@ public class SysLoginService {
// 超级管理员 登出清除动态租户
TenantHelper.clearDynamic();
}
recordLogininfor(loginUser.getTenantId(), loginUser.getUsername(), Constants.LOGOUT, MessageUtils.message("user.logout.success"));
recordLogininfor(loginUser.getTenantId(), loginUser.getUsername(), Constants.LOGOUT, MessageUtils.message("user.logout.success"), loginUser.getUserType());
} catch (NotLoginException ignored) {
} finally {
try {
......@@ -152,7 +152,7 @@ public class SysLoginService {
boolean captchaEnabled = captchaProperties.getEnabled();
// 验证码开关
if (captchaEnabled) {
validateCaptcha(tenantId, username, registerBody.getCode(), registerBody.getUuid());
validateCaptcha(tenantId, username, registerBody.getCode(), registerBody.getUuid(), registerBody.getUserType());
}
// 注册用户信息
......@@ -178,7 +178,7 @@ public class SysLoginService {
.setSystemUserId(userId)
);
recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.register.success"));
recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.register.success"), userType);
}
/**
......@@ -187,17 +187,18 @@ public class SysLoginService {
* @param username 用户名
* @param code 验证码
* @param uuid 唯一标识
* @param userType 用户类型
*/
public void validateCaptcha(String tenantId, String username, String code, String uuid) {
public void validateCaptcha(String tenantId, String username, String code, String uuid, String userType) {
String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + StringUtils.blankToDefault(uuid, "");
String captcha = RedisUtils.getCacheObject(verifyKey);
RedisUtils.deleteObject(verifyKey);
if (captcha == null) {
recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.jcaptcha.expire"));
recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.jcaptcha.expire"), userType);
throw new CaptchaExpireException();
}
if (!code.equalsIgnoreCase(captcha)) {
recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.jcaptcha.error"));
recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.jcaptcha.error"), userType);
throw new CaptchaException();
}
}
......@@ -210,20 +211,21 @@ public class SysLoginService {
* @param message 消息内容
* @return
*/
public void recordLogininfor(String tenantId, String username, String status, String message) {
public void recordLogininfor(String tenantId, String username, String status, String message, String userType) {
// 封装对象
LogininforEvent logininforEvent = new LogininforEvent();
logininforEvent.setTenantId(tenantId);
logininforEvent.setUsername(username);
logininforEvent.setStatus(status);
logininforEvent.setMessage(message);
logininforEvent.setUserType(userType);
SpringUtils.context().publishEvent(logininforEvent);
}
/**
* 登录校验
*/
public void checkLogin(LoginType loginType, String tenantId, String username, Supplier<Boolean> supplier) {
public void checkLogin(LoginType loginType, String tenantId, String userType, String username, Supplier<Boolean> supplier) {
String errorKey = CacheConstants.PWD_ERR_CNT_KEY + username;
String loginFail = Constants.LOGIN_FAIL;
Integer maxRetryCount = userPasswordProperties.getMaxRetryCount();
......@@ -233,7 +235,7 @@ public class SysLoginService {
int errorNumber = ObjectUtil.defaultIfNull(RedisUtils.getCacheObject(errorKey), 0);
// 锁定时间内登录 则踢出
if (errorNumber >= maxRetryCount) {
recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime));
recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime), userType);
throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime);
}
......@@ -243,11 +245,11 @@ public class SysLoginService {
RedisUtils.setCacheObject(errorKey, errorNumber, Duration.ofMinutes(lockTime));
// 达到规定错误次数 则锁定登录
if (errorNumber >= maxRetryCount) {
recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime));
recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime), userType);
throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime);
} else {
// 未达到规定错误次数
recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitCount(), errorNumber));
recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitCount(), errorNumber), userType);
throw new UserException(loginType.getRetryLimitCount(), errorNumber);
}
}
......
......@@ -47,9 +47,10 @@ public class EmailAuthStrategy implements IAuthStrategy {
String tenantId = loginBody.getTenantId();
String email = loginBody.getEmail();
String emailCode = loginBody.getEmailCode();
String userType = loginBody.getUserType();
LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
LoginUser user = remoteUserService.getUserInfoByEmail(email, tenantId);
loginService.checkLogin(LoginType.EMAIL, tenantId, user.getUsername(), () -> !validateEmailCode(tenantId, email, emailCode));
loginService.checkLogin(LoginType.EMAIL, tenantId, userType, user.getUsername(), () -> !validateEmailCode(tenantId, email, emailCode, userType));
return user;
});
loginUser.setClientKey(client.getClientKey());
......@@ -74,10 +75,10 @@ public class EmailAuthStrategy implements IAuthStrategy {
/**
* 校验邮箱验证码
*/
private boolean validateEmailCode(String tenantId, String email, String emailCode) {
private boolean validateEmailCode(String tenantId, String email, String emailCode, String userType) {
String code = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + email);
if (StringUtils.isBlank(code)) {
loginService.recordLogininfor(tenantId, email, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
loginService.recordLogininfor(tenantId, email, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"), userType);
throw new CaptchaExpireException();
}
return code.equals(emailCode);
......
......@@ -61,14 +61,15 @@ public class PasswordAuthStrategy implements IAuthStrategy {
String password = loginBody.getPassword();
String code = loginBody.getCode();
String uuid = loginBody.getUuid();
String userType = loginBody.getUserType();
// 验证码开关
if (captchaProperties.getEnabled()) {
validateCaptcha(tenantId, username, code, uuid);
validateCaptcha(tenantId, username, code, uuid, userType);
}
LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
LoginUser user = remoteUserService.getUserInfo(username, null, tenantId, loginBody.getUserType());
loginService.checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword()));
loginService.checkLogin(LoginType.PASSWORD, tenantId, userType, username, () -> !BCrypt.checkpw(password, user.getPassword()));
return user;
});
loginUser.setClientKey(client.getClientKey());
......@@ -99,16 +100,16 @@ public class PasswordAuthStrategy implements IAuthStrategy {
* @param code 验证码
* @param uuid 唯一标识
*/
private void validateCaptcha(String tenantId, String username, String code, String uuid) {
private void validateCaptcha(String tenantId, String username, String code, String uuid, String userType) {
String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + StringUtils.blankToDefault(uuid, "");
String captcha = RedisUtils.getCacheObject(verifyKey);
RedisUtils.deleteObject(verifyKey);
if (captcha == null) {
loginService.recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
loginService.recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"), userType);
throw new CaptchaExpireException();
}
if (!code.equalsIgnoreCase(captcha)) {
loginService.recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"));
loginService.recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"), userType);
throw new CaptchaException();
}
}
......
......@@ -47,9 +47,10 @@ public class SmsAuthStrategy implements IAuthStrategy {
String tenantId = loginBody.getTenantId();
String phonenumber = loginBody.getPhonenumber();
String smsCode = loginBody.getSmsCode();
String userType = loginBody.getUserType();
LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
LoginUser user = remoteUserService.getUserInfoByPhonenumber(phonenumber, tenantId);
loginService.checkLogin(LoginType.SMS, tenantId, user.getUsername(), () -> !validateSmsCode(tenantId, phonenumber, smsCode));
loginService.checkLogin(LoginType.SMS, tenantId, userType, user.getUsername(), () -> !validateSmsCode(tenantId, phonenumber, smsCode, userType));
return user;
});
loginUser.setClientKey(client.getClientKey());
......@@ -74,10 +75,10 @@ public class SmsAuthStrategy implements IAuthStrategy {
/**
* 校验短信验证码
*/
private boolean validateSmsCode(String tenantId, String phonenumber, String smsCode) {
private boolean validateSmsCode(String tenantId, String phonenumber, String smsCode, String userType) {
String code = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + phonenumber);
if (StringUtils.isBlank(code)) {
loginService.recordLogininfor(tenantId, phonenumber, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
loginService.recordLogininfor(tenantId, phonenumber, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"), userType);
throw new CaptchaExpireException();
}
return code.equals(smsCode);
......
......@@ -63,6 +63,7 @@ public class LogEventListener {
s.append(getBlock(ip));
s.append(address);
s.append(getBlock(logininforEvent.getUsername()));
s.append(getBlock(logininforEvent.getUserType()));
s.append(getBlock(logininforEvent.getStatus()));
s.append(getBlock(logininforEvent.getMessage()));
// 打印信息到日志
......@@ -83,6 +84,7 @@ public class LogEventListener {
logininfor.setLoginLocation(address);
logininfor.setBrowser(browser);
logininfor.setOs(os);
logininfor.setUserType(logininforEvent.getUserType());
logininfor.setMsg(logininforEvent.getMessage());
// 日志状态
if (StringUtils.equalsAny(logininforEvent.getStatus(), Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) {
......
......@@ -27,6 +27,11 @@ public class LogininforEvent implements Serializable {
*/
private String username;
/**
* 用户类型
*/
private String userType;
/**
* 登录状态 0成功 1失败
*/
......
......@@ -43,6 +43,7 @@ public class LoginHelper {
public static final String YS_USER_ID = "ysUserId";
public static final String OPEN_ID = "openId";
public static final String MEMBER_ID = "memberId";
public static final String USER_TYPE = "userType";
/**
* 登录系统 基于 设备类型
......@@ -60,6 +61,7 @@ public class LoginHelper {
.setExtra(DEPT_KEY, loginUser.getDeptId())
.setExtra(DEPT_NAME_KEY, loginUser.getDeptName())
.setExtra(DEPT_CATEGORY_KEY, loginUser.getDeptCategory())
.setExtra(USER_TYPE, loginUser.getUserType())
);
StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser);
}
......@@ -186,6 +188,13 @@ public class LoginHelper {
return UserType.getUserType(loginType);
}
/**
* 获取用户类型
*/
public static String getUserTypeStr() {
return StpUtil.getLoginIdAsString();
}
/**
* 是否为超级管理员
*
......
......@@ -26,7 +26,7 @@ public class SensitiveServiceImpl implements SensitiveService {
if (!LoginHelper.isLogin()) {
return true;
}
if (StringUtils.equals(LoginHelper.getUserType().getUserType(), UserType.APP_USER.getUserType())) {
if (StringUtils.equals(LoginHelper.getUserTypeStr(), UserType.APP_USER.getUserType())) {
return false;
}
boolean roleExist = StringUtils.isNotBlank(roleKey);
......
......@@ -94,7 +94,7 @@ public class PayOrderController {
Map<String, String> channelExtras = reqVO.getChannelExtras() == null ?
Maps.newHashMapWithExpectedSize(2) : reqVO.getChannelExtras();
channelExtras.put(WalletPayClient.USER_ID_KEY, String.valueOf(LoginHelper.getMemberId()));
channelExtras.put(WalletPayClient.USER_TYPE_KEY, String.valueOf(LoginHelper.getUserType()));
channelExtras.put(WalletPayClient.USER_TYPE_KEY, LoginHelper.getUserTypeStr());
reqVO.setChannelExtras(channelExtras);
}
......
......@@ -66,7 +66,7 @@ public class AppPayOrderController {
Map<String, String> channelExtras = reqVO.getChannelExtras() == null ?
Maps.newHashMapWithExpectedSize(2) : reqVO.getChannelExtras();
channelExtras.put(WalletPayClient.USER_ID_KEY, String.valueOf(LoginHelper.getMemberId()));
channelExtras.put(WalletPayClient.USER_TYPE_KEY, String.valueOf(LoginHelper.getUserType()));
channelExtras.put(WalletPayClient.USER_TYPE_KEY, LoginHelper.getUserTypeStr());
reqVO.setChannelExtras(channelExtras);
}
......
......@@ -37,6 +37,11 @@ public class SysLogininfor implements Serializable {
*/
private String userName;
/**
* 用户类型
*/
private String userType;
/**
* 客户端
*/
......
......@@ -33,6 +33,11 @@ public class SysLogininforBo {
*/
private String userName;
/**
* 用户类型
*/
private String userType;
/**
* 客户端
*/
......
......@@ -45,6 +45,11 @@ public class SysLogininforVo implements Serializable {
@ExcelProperty(value = "用户账号")
private String userName;
/**
* 用户类型
*/
private String userType;
/**
* 客户端
*/
......
......@@ -27,7 +27,7 @@ public class SysSensitiveServiceImpl implements SensitiveService {
if (!LoginHelper.isLogin()) {
return true;
}
if (StringUtils.equals(LoginHelper.getUserType().getUserType(), UserType.APP_USER.getUserType())) {
if (StringUtils.equals(LoginHelper.getUserTypeStr(), UserType.APP_USER.getUserType())) {
return false;
}
boolean roleExist = StringUtils.isNotEmpty(roleKey);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论