반응형
아련하지만, 몇 년 전 스프링부트 프로젝트를 할 때 신입사원이 아이피를 구해 테이블에 저장한 것을 보고 이상하다며 이의를 제기했던 일이 생각났다.
오늘 프로젝트 검색 API를 외부에 열어주어야 하는데, 원격 호출하는 IP에 대해서 예외처리를 하고자 클라이언트 IP를 구하는 함수를 보면서 정리해두면 좋겠다는 생각이 들어 간단하게 요약, 정리를 한다.
public static String getClientIP(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (ip == null) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null) {
ip = request.getRemoteAddr();
}
log.debug("client id address = {}", ip);
return ip;
}
일반적으로 request.getRemoateAddr()로 받아지지 않는 경우가 있는데
프락시서버를 통해 들어오거나, 로드밸런스 등을 통할 경우 request에서 찾아야하는 헤더가 좀 더 있다.
각 if문의 결과를 비교해서 로그를 찍으면 어디서 아이피를 얻었는지 알 수 있다.
반응형
'프로그래밍 > Spring' 카테고리의 다른 글
Springboot 3.0 Maven, QueryDSL설정 자료. (0) | 2023.04.28 |
---|---|
@Transient 사용 예, - Entity클래스에 임시 프로퍼티 정의할 때 (0) | 2023.04.12 |
스프링 웹 플로의 데이터 범위의 유형 (0) | 2020.09.24 |
스프링 웹 플로의 상태 유형 (0) | 2020.09.24 |
ObjectMapper Map to JSON String JSON String to Map 변환 (0) | 2020.02.28 |