[Spring/JAVA] 사용자 IP, 접속자IP, 클라이언트IP 주소 가져오기
2021. 1. 13. 10:50
클라이언트의 IP 주소는 HttpServletRequest에 있는 getRemoteAddr() 메서드를 이용하여 알아낼 수 있다.
Ip주소가 프록시나 로드밸런서를 통해 호출되는 경우 로드밸런서의 IP가 나온다
이 경우를 방지하기 위해 X-Forwarded-For 값을 확인하고 없을 경우 getRemoteAddr()을 사용한다.
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@Controller
public class HomeController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String writIp(Model model) {
HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
String ip = req.getHeader("X-FORWARDED-FOR");
if (ip == null) {
ip = req.getRemoteAddr();
}
model.addAttribute("clientIP", ip);
return "writIp";
}
}
X-Forwarded-For란?
XFF헤더는 HTTP 프록시나 로드 밸런서를 통해 웹 서버에 접속하는 클라이언트의 원 IP주소를 식별하는 사실상의 표준 헤더이다. 클라이언트와 서버 중간에서 트래픽이 프록시나 로드 밸런서를 거치면, 서버 접근 로그에는 프록시나 로드 밸런서의 IP 주소만을 담고 있다. 클라이언트의 원 IP 주소를 보기위해 X-Forwarded-For 요청 헤더가 사용된다.
이 헤더는 디버깅, 통계, 그리고 위치 종속적인 컨텐츠를 위해 사용되고, 클라이언트의 IP 주소 등과 같은 민감한 개인정보를 노출시킨다. 그러므로 이 헤더를 사용할 때에는 사용자의 프라이버시를 주의해야 한다.
X-Forwarded-For 은 이메일 메시지가 다른 계정으로부터 포워딩되었음을 나타내는 이메일 헤더이기도 하다.
'Web > spring' 카테고리의 다른 글
[Spring/Web Socket] 웹 소켓 세션을 이용한 웹상에서 통신 (1) (1) | 2021.03.19 |
---|---|
[sqlMap] There is no statement named / sqlMap.xml 오류 (0) | 2021.03.02 |
[Spring] No mapping found for HTTP request with URI (0) | 2021.01.15 |
[Spring] 자바 파일 적용 안될 때, 소스 파일 수정 안될 때 (0) | 2021.01.13 |
[Spring] Bean Creation Exception (0) | 2021.01.12 |