针对企业双线接入的情况, 允许使用两个IP登录

This commit is contained in:
2023-10-16 16:29:08 +08:00
parent 7620b607f4
commit 2b42b371a1
2 changed files with 24 additions and 3 deletions

View File

@@ -10,6 +10,7 @@ public class LoginDto {
private String captchaId; private String captchaId;
private String captcha; private String captcha;
private String ip; private String ip;
private String ip2;
private String ua; private String ua;
private String userId; private String userId;
private String sessionId; private String sessionId;

View File

@@ -131,6 +131,7 @@ public class SessionService {
.set(sessionId, objectMapper.writeValueAsString(dto), 1, TimeUnit.HOURS); .set(sessionId, objectMapper.writeValueAsString(dto), 1, TimeUnit.HOURS);
} }
@SneakyThrows
public void rebuildSession(String sessionId) { public void rebuildSession(String sessionId) {
if (StringUtils.isEmpty(sessionId)) { if (StringUtils.isEmpty(sessionId)) {
@@ -159,9 +160,28 @@ public class SessionService {
String currentUa = RequestUtils.getUa(request); String currentUa = RequestUtils.getUa(request);
if (!StringUtils.equalsIgnoreCase(currentIp, loginDto.getIp())) { if (!StringUtils.equalsIgnoreCase(currentIp, loginDto.getIp())) {
log.warn("检测到IP变化: {} {}", loginDto, currentIp); // 针对企业双线接入的情况, 允许使用两个IP登录
logout(loginDto.getSessionId()); if (StringUtils.isEmpty(loginDto.getIp2())) {
throw new BizException("invalidToken", "检测到IP发生变化,请重新登录");
loginDto.setIp2(currentIp);
// 写入新的ip地址
stringRedisTemplate
.opsForValue()
.set(
sessionId,
objectMapper.writeValueAsString(loginDto),
1,
TimeUnit.HOURS);
} else {
// 如果两个ip都不匹配, 则认为是异常登录
if (!StringUtils.equalsIgnoreCase(currentIp, loginDto.getIp2())) {
log.warn("检测到IP变化: {} {}", loginDto, currentIp);
logout(loginDto.getSessionId());
throw new BizException("invalidToken", "检测到IP发生变化,请重新登录");
}
}
} }
if (!StringUtils.equalsIgnoreCase(currentUa, loginDto.getUa())) { if (!StringUtils.equalsIgnoreCase(currentUa, loginDto.getUa())) {