From 2b42b371a1a99aa64973e690f8c0ef037bf56408 Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Mon, 16 Oct 2023 16:29:08 +0800 Subject: [PATCH] =?UTF-8?q?=E9=92=88=E5=AF=B9=E4=BC=81=E4=B8=9A=E5=8F=8C?= =?UTF-8?q?=E7=BA=BF=E6=8E=A5=E5=85=A5=E7=9A=84=E6=83=85=E5=86=B5,=20?= =?UTF-8?q?=E5=85=81=E8=AE=B8=E4=BD=BF=E7=94=A8=E4=B8=A4=E4=B8=AAIP?= =?UTF-8?q?=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/lihongjie/coal/session/LoginDto.java | 1 + .../coal/session/SessionService.java | 26 ++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/main/java/cn/lihongjie/coal/session/LoginDto.java b/src/main/java/cn/lihongjie/coal/session/LoginDto.java index bc68597c..f5c8c513 100644 --- a/src/main/java/cn/lihongjie/coal/session/LoginDto.java +++ b/src/main/java/cn/lihongjie/coal/session/LoginDto.java @@ -10,6 +10,7 @@ public class LoginDto { private String captchaId; private String captcha; private String ip; + private String ip2; private String ua; private String userId; private String sessionId; diff --git a/src/main/java/cn/lihongjie/coal/session/SessionService.java b/src/main/java/cn/lihongjie/coal/session/SessionService.java index 610d1110..6165d17d 100644 --- a/src/main/java/cn/lihongjie/coal/session/SessionService.java +++ b/src/main/java/cn/lihongjie/coal/session/SessionService.java @@ -131,6 +131,7 @@ public class SessionService { .set(sessionId, objectMapper.writeValueAsString(dto), 1, TimeUnit.HOURS); } + @SneakyThrows public void rebuildSession(String sessionId) { if (StringUtils.isEmpty(sessionId)) { @@ -159,9 +160,28 @@ public class SessionService { String currentUa = RequestUtils.getUa(request); if (!StringUtils.equalsIgnoreCase(currentIp, loginDto.getIp())) { - log.warn("检测到IP变化: {} {}", loginDto, currentIp); - logout(loginDto.getSessionId()); - throw new BizException("invalidToken", "检测到IP发生变化,请重新登录"); + // 针对企业双线接入的情况, 允许使用两个IP登录 + if (StringUtils.isEmpty(loginDto.getIp2())) { + + 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())) {