클라이언트의 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 은 이메일 메시지가 다른 계정으로부터 포워딩되었음을 나타내는 이메일 헤더이기도 하다.

 

 

BELATED ARTICLES

more