Skip to content

Commit af53c67

Browse files
gadfly3173colorful3
authored andcommitted
fix: 反代后IP获取错误
1 parent 247c272 commit af53c67

File tree

3 files changed

+53
-3
lines changed

3 files changed

+53
-3
lines changed

src/main/java/io/github/talelin/latticy/common/interceptor/RequestLogInterceptor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.talelin.latticy.common.interceptor;
22

3+
import io.github.talelin.latticy.common.util.IPUtil;
34
import lombok.extern.slf4j.Slf4j;
45
import org.springframework.web.servlet.AsyncHandlerInterceptor;
56

@@ -27,7 +28,7 @@ public void afterCompletion(HttpServletRequest request, HttpServletResponse resp
2728
log.info("[{}] -> [{}] from: {} costs: {}ms",
2829
request.getMethod(),
2930
request.getServletPath(),
30-
request.getRemoteAddr(),
31+
IPUtil.getIPFromRequest(request),
3132
System.currentTimeMillis() - startTime.get()
3233
);
3334
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package io.github.talelin.latticy.common.util;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.springframework.web.context.request.RequestContextHolder;
5+
import org.springframework.web.context.request.ServletRequestAttributes;
6+
7+
import javax.servlet.http.HttpServletRequest;
8+
9+
/**
10+
* IP工具类
11+
*/
12+
@Slf4j
13+
public class IPUtil {
14+
15+
private static final String[] IP_HEADER_CANDIDATES = {
16+
"X-Forwarded-For",
17+
"Proxy-Client-IP",
18+
"WL-Proxy-Client-IP",
19+
"HTTP_X_FORWARDED_FOR",
20+
"HTTP_X_FORWARDED",
21+
"HTTP_X_CLUSTER_CLIENT_IP",
22+
"HTTP_CLIENT_IP",
23+
"HTTP_FORWARDED_FOR",
24+
"HTTP_FORWARDED",
25+
"HTTP_VIA",
26+
"REMOTE_ADDR"
27+
};
28+
29+
public static String getIPFromRequest(HttpServletRequest request) {
30+
if (request == null) {
31+
if (null == RequestContextHolder.getRequestAttributes()) {
32+
return null;
33+
}
34+
request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
35+
}
36+
37+
for (String header : IP_HEADER_CANDIDATES) {
38+
String ipList = request.getHeader(header);
39+
if (ipList != null && ipList.length() != 0 && !"unknown".equalsIgnoreCase(ipList)) {
40+
log.debug("ipList.split(\",\")[0]::{}", ipList.split(",")[0]);
41+
return ipList.split(",")[0];
42+
}
43+
}
44+
45+
log.debug("request.getRemoteAddr()::{}", request.getRemoteAddr());
46+
return request.getRemoteAddr();
47+
}
48+
}

src/main/java/io/github/talelin/latticy/module/log/MDCAccessServletFilter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.talelin.latticy.module.log;
22

3+
import io.github.talelin.latticy.common.util.IPUtil;
34
import org.slf4j.Logger;
45
import org.slf4j.LoggerFactory;
56
import org.slf4j.MDC;
@@ -55,14 +56,14 @@ public void putResponseMDC(ServletResponse servletResponse) {
5556
*/
5657
public void putRequestMDC(ServletRequest servletRequest) throws IOException {
5758
MDC.put(MDCAccessConstant.REQUEST_REMOTE_HOST_MDC_KEY, servletRequest.getRemoteHost());
58-
MDC.put(MDCAccessConstant.REQUEST_REMOTE_ADDR_MDC_KEY, servletRequest.getRemoteAddr());
59-
MDC.put(MDCAccessConstant.REQUEST_PROTOCOL_MDC_KEY, servletRequest.getProtocol());
6059
MDC.put(MDCAccessConstant.REQUEST_PROTOCOL_MDC_KEY, servletRequest.getProtocol());
60+
MDC.put(MDCAccessConstant.REQUEST_REMOTE_ADDR_MDC_KEY, servletRequest.getRemoteAddr());
6161
MDC.put(MDCAccessConstant.REQUEST_REMOTE_PORT_MDC_KEY, String.valueOf(servletRequest.getRemotePort()));
6262
MDC.put(MDCAccessConstant.REQUEST_BODY_BYTES_SENT_MDC_KEY, String.valueOf(servletRequest.getContentLength()));
6363

6464
if (servletRequest instanceof HttpServletRequest) {
6565
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
66+
MDC.put(MDCAccessConstant.REQUEST_REMOTE_ADDR_MDC_KEY, IPUtil.getIPFromRequest(httpServletRequest));
6667
MDC.put(MDCAccessConstant.REQUEST_REQUEST_URI_MDC_KEY, httpServletRequest.getRequestURI());
6768
StringBuffer requestUrl = httpServletRequest.getRequestURL();
6869
if (requestUrl != null) {

0 commit comments

Comments
 (0)