feat: 优化登录功能,添加环境验证和环境信息记录

- 登录前验证是否存在激活的环境
- 登录前验证环境是否处于激活状态
- 登录历史中记录环境编码和环境ID
- 添加错误码:NO_ACTIVE_ENVIRONMENT、ENVIRONMENT_NOT_ACTIVE、ORG_TYPE_EMPTY
- 增强日志输出,显示环境信息

需求编号: 2026-01-21-001
This commit is contained in:
Kris 2026-01-24 15:09:58 +08:00
parent 1172ef02ad
commit 9d15d57c35

View File

@ -66,7 +66,33 @@ public class SalesforceLoginServiceImpl implements ISalesforceLoginService {
if (StringUtils.isEmpty(loginType)) {
throw new SalesforceAuthException("LOGIN_TYPE_EMPTY", "登录类型不能为空");
}
String orgType = request.getOrgType();
if (StringUtils.isEmpty(orgType)) {
throw new SalesforceAuthException("ORG_TYPE_EMPTY", "ORG类型不能为空");
}
DataiConfigEnvironment activeEnvironment = configEnvironmentService.getCurrentActiveEnvironment(orgType);
if (activeEnvironment == null) {
logger.warn("登录失败当前没有激活的环境ORG类型: {}", orgType);
SalesforceLoginResult errorResult = new SalesforceLoginResult();
errorResult.setSuccess(false);
errorResult.setErrorCode("NO_ACTIVE_ENVIRONMENT");
errorResult.setErrorMessage("当前没有激活的环境,请联系管理员激活环境后再登录");
saveLoginHistory(errorResult, request, "failed", null);
return errorResult;
}
if (!Boolean.TRUE.equals(activeEnvironment.getIsActive())) {
logger.warn("登录失败,当前环境未激活,环境编码: {}, ORG类型: {}", activeEnvironment.getEnvironmentCode(), orgType);
SalesforceLoginResult errorResult = new SalesforceLoginResult();
errorResult.setSuccess(false);
errorResult.setErrorCode("ENVIRONMENT_NOT_ACTIVE");
errorResult.setErrorMessage("当前环境未激活,请联系管理员激活环境后再登录");
saveLoginHistory(errorResult, request, "failed", activeEnvironment);
return errorResult;
}
LoginStrategy strategy = loginStrategyFactory.getLoginStrategy(loginType);
SalesforceLoginResult result = strategy.login(request);
@ -74,16 +100,17 @@ public class SalesforceLoginServiceImpl implements ISalesforceLoginService {
if (result.isSuccess()) {
saveLoginSession(result, request);
saveLoginHistory(result, request, "success");
saveLoginHistory(result, request, "success", activeEnvironment);
String cacheKey = getCacheKeyByOrgType(request.getOrgType());
String cacheKey = getCacheKeyByOrgType(orgType);
CacheUtils.put(SalesforceConfigConstants.CACHE_NAME, cacheKey, result);
updateEnvironmentValidity(request.getOrgType(), true);
updateEnvironmentValidity(orgType, true);
logger.info("Salesforce登录成功Session ID: {}, 用户ID: {}, ORG类型: {}", result.getSessionId(), result.getUserId(), result.getOrgType());
logger.info("Salesforce登录成功Session ID: {}, 用户ID: {}, ORG类型: {}, 环境编码: {}",
result.getSessionId(), result.getUserId(), result.getOrgType(), activeEnvironment.getEnvironmentCode());
} else {
saveLoginHistory(result, request, "failed");
saveLoginHistory(result, request, "failed", activeEnvironment);
logger.error("Salesforce登录失败错误代码: {}, 错误信息: {}", result.getErrorCode(), result.getErrorMessage());
}
@ -95,7 +122,7 @@ public class SalesforceLoginServiceImpl implements ISalesforceLoginService {
errorResult.setSuccess(false);
errorResult.setErrorCode(e.getErrorCode());
errorResult.setErrorMessage(e.getMessage());
saveLoginHistory(errorResult, request, "failed");
saveLoginHistory(errorResult, request, "failed", null);
return errorResult;
} catch (Exception e) {
logger.error("Salesforce登录系统异常: {}", e.getMessage(), e);
@ -103,7 +130,7 @@ public class SalesforceLoginServiceImpl implements ISalesforceLoginService {
errorResult.setSuccess(false);
errorResult.setErrorCode("SYSTEM_ERROR");
errorResult.setErrorMessage("系统异常: " + e.getMessage());
saveLoginHistory(errorResult, request, "failed");
saveLoginHistory(errorResult, request, "failed", null);
return errorResult;
}
}
@ -183,7 +210,7 @@ public class SalesforceLoginServiceImpl implements ISalesforceLoginService {
}
}
private void saveLoginHistory(SalesforceLoginResult result, SalesforceLoginRequest request, String status) {
private void saveLoginHistory(SalesforceLoginResult result, SalesforceLoginRequest request, String status, DataiConfigEnvironment activeEnvironment) {
LocalDateTime requestTime = LocalDateTime.now();
try {
@ -216,6 +243,11 @@ public class SalesforceLoginServiceImpl implements ISalesforceLoginService {
history.setOrganizationId(result.getOrganizationId());
history.setLoginStatus(status);
if (activeEnvironment != null) {
history.setEnvironmentCode(activeEnvironment.getEnvironmentCode());
history.setEnvironmentId(activeEnvironment.getId());
}
HttpServletRequest httpRequest = getCurrentRequest();
if (httpRequest != null) {
String userAgent = httpRequest.getHeader("User-Agent");
@ -256,7 +288,11 @@ public class SalesforceLoginServiceImpl implements ISalesforceLoginService {
history.setOrgType(request.getOrgType());
loginHistoryService.insertDataiSfLoginHistory(history);
logger.debug("保存登录历史记录成功,状态: {}", status);
String envInfo = activeEnvironment != null
? String.format("环境编码: %s, 环境ID: %d", activeEnvironment.getEnvironmentCode(), activeEnvironment.getId())
: "无激活环境";
logger.debug("保存登录历史记录成功,状态: {}, {}", status, envInfo);
} catch (Exception e) {
logger.error("保存登录历史记录失败: {}", e.getMessage(), e);
}