티스토리 뷰
관리자 ID일 경우 로그인 할 때 사외 IP로 접근 시에 로그인이 되지 않도록 해둔 로직이 있었는데, 어느 순간부터 사내에 있는 PC로 접근했는데도 로그인이 되지 않는 일이 발생했습니다. 문제를 찾아보니 웹 서버에 접근할 때 L4(Load balancing)이나 Proxy 서버 등을 사용할 때 request.getRemoteAddr(); 로 IP를 가져오면 Client IP가 아니라 L4나 Proxy 서버의 IP를 가져오는 것을 알 수 있었습니다. 이런 장비들의 경우 Client IP를 Header에다가 남겨둔다고 합니다. 따라서, Client IP를 가져오기 위해서는 다음과 같은 로직을 사용해야 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import javax.servlet.http.HttpServletRequest;
public class IPTraceUtils {
public static String getRemoteAddr(HttpServletRequest request) {
String ip = null;
ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Real-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-RealIP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("REMOTE_ADDR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}
|
cs |
이런식으로 해주면 본래 Client의 IP를 가져올 수 있습니다. 여기서 getHeader의 문자들은 각 기기들이 주로 Client IP를 남기는 Header의 이름입니다. 아마도 저 정도면 거의 모든 Proxy 환경이나 L4에 대응이 가능할 겁니다. 더 자세한 정보나, 다른 언어에서 IP를 가져오고 싶은 경우에는 아래 링크를 확인하시기 바랍니다.
https://www.lesstif.com/pages/viewpage.action?pageId=20775886
'IT > Java' 카테고리의 다른 글
JPA - Eclipse로 테이블에서 Jpa entity 자동 생성(generating entities from table) (1) | 2022.10.07 |
---|---|
Java - Multi-Thread Programming (0) | 2019.11.17 |
Java - SOAP 통신 예제 (0) | 2017.06.17 |
Java - Collections Framework(컬렉션 프레임워크) (0) | 2017.03.05 |
Java - Generic(제네릭) (0) | 2017.03.05 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday