From 9ee75303cceefab1ccbb837c26c5790374604157 Mon Sep 17 00:00:00 2001 From: chenxudong Date: Tue, 18 Feb 2025 13:51:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E7=AB=AF=E5=9C=B0=E5=9D=80=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/config/LoginInterceptor.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/LoginInterceptor.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/LoginInterceptor.java index 778e48e..f19c71d 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/LoginInterceptor.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/LoginInterceptor.java @@ -12,7 +12,7 @@ import com.electromagnetic.industry.software.common.util.TokenUtil; import com.electromagnetic.industry.software.common.util.UserThreadLocal; import com.electromagnetic.industry.software.manage.mapper.TokenMapper; import com.electromagnetic.industry.software.manage.mapper.UserAccessLogMapper; -import com.electromagnetic.industry.software.manage.mapper.UserMapper; +import org.springframework.web.util.WebUtils; import com.electromagnetic.industry.software.manage.pojo.models.Token; import com.electromagnetic.industry.software.manage.pojo.models.UserAccessLog; import io.jsonwebtoken.Claims; @@ -117,7 +117,7 @@ public class LoginInterceptor implements HandlerInterceptor { .action(userOperation.value()) .requestUrl(request.getRequestURL().toString()) .reqArgs(reqArgs) - .remoteAddr(request.getRemoteAddr()) + .remoteAddr(getRealIp(request)) .accessSuccess(true) .createTime(new Date()) .operationModule(userOperation.modelName().key) @@ -141,4 +141,21 @@ public class LoginInterceptor implements HandlerInterceptor { Date now = new Date(SystemClock.now()); return token != null && now.before(token.getExpireAt()); } + + private static String getRealIp(HttpServletRequest request) { + String ipAddress = request.getHeader("X-Forwarded-For"); + if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) { + // 回退到X-Real-IP或直接RemoteAddr + ipAddress = request.getHeader("X-Real-IP"); + } + if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getRemoteAddr(); + } + // 处理多级代理的情况(取第一个IP) + if (ipAddress.contains(",")) { + ipAddress = ipAddress.split(",")[0].trim(); + } + return ipAddress; + } + }