修改获取客户端地址的问题。

This commit is contained in:
chenxudong 2025-02-18 13:51:19 +08:00
parent c3d570a3f3
commit 9ee75303cc
1 changed files with 19 additions and 2 deletions

View File

@ -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.common.util.UserThreadLocal;
import com.electromagnetic.industry.software.manage.mapper.TokenMapper; import com.electromagnetic.industry.software.manage.mapper.TokenMapper;
import com.electromagnetic.industry.software.manage.mapper.UserAccessLogMapper; 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.Token;
import com.electromagnetic.industry.software.manage.pojo.models.UserAccessLog; import com.electromagnetic.industry.software.manage.pojo.models.UserAccessLog;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
@ -117,7 +117,7 @@ public class LoginInterceptor implements HandlerInterceptor {
.action(userOperation.value()) .action(userOperation.value())
.requestUrl(request.getRequestURL().toString()) .requestUrl(request.getRequestURL().toString())
.reqArgs(reqArgs) .reqArgs(reqArgs)
.remoteAddr(request.getRemoteAddr()) .remoteAddr(getRealIp(request))
.accessSuccess(true) .accessSuccess(true)
.createTime(new Date()) .createTime(new Date())
.operationModule(userOperation.modelName().key) .operationModule(userOperation.modelName().key)
@ -141,4 +141,21 @@ public class LoginInterceptor implements HandlerInterceptor {
Date now = new Date(SystemClock.now()); Date now = new Date(SystemClock.now());
return token != null && now.before(token.getExpireAt()); 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;
}
} }