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; + } + }