프로젝트를 진행하다보면 Client의 IP를 가져와야하는 경우가 있습니다.
보통 Spring의 controller에서 request.getRemoteAddr();를 이용하여 IP를 가져오는데 해당 메서드의 문제는 WAS서버 앞에 다른서버가 존재할때 (프록시 서버, 로드밸런싱 서버 등) request.getRemoteAddr();를 이용하면 Client IP가 아닌 WAS 앞의 서버의 IP를 가져옵니다.
이러한 경우 Client의 IP는 Header에 남겨둔다고 하여 Header를 이용해서 IP를 가져와야 합니다.
public static String etRemoteAddr(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;
}
이러한 방법을 Client IP를 가져올 수 있습니다.
더 자세한 정보는 하단의 링크에서 확인 하실 수 있습니다.
https://www.lesstif.com/pages/viewpage.action?pageId=20775886
[Spring/오류] Cannot change version of project facet Dynamic Web Module to 2.5. (0) | 2020.07.31 |
---|---|
[Spring/POI] SXSSF 방식을 활용한 엑셀 다운로드 (0) | 2020.07.28 |
[Spring]IE HWP 파일 다운로드 시 브라우저로 읽는 문제점, 여러가지 해결을 시도해보았습니다. (4) | 2020.05.04 |
[Spring/Java] POI 라이브러리를 활용 Excel 데이터 읽기 (0) | 2020.04.19 |
[Java] 파일 확장자 체크(확장자 체크/Tika를 이용한 MimeType 검사) (0) | 2020.04.05 |
댓글 영역