2013-07-08 2 views
0

REST API를 개발 중입니다. 어떤 경우에 요청이 백엔드 UI에 설정된 알려진 IP에서 왔는지 확인하려고합니다. 나는 노력이 :요청 호스트 유효성 확인

try { 
    URL url = new URL(allowedHostname); 
    InetAddress[] allowedIps = InetAddress.getAllByName(url.getHost()); 
    for (InetAddress host : allowedIps) { 
     if (requesterIp.equals(host.getHostAddress())) { 
      return true; 
     } 
    } 
} catch (UnknownHostException e) { 
    logger.warn("[validateHostname] ", e); 
} 
return false; 

경우 allowedHostname = request.getRemoteAddr()

하지만 작동하는 것 같다하지 않습니다. 다른 호스트의 이름으로 요청하는 것이 상대적으로 쉽기 때문에 호스트 이름의 유효성을 검사하는 것을 원하지 않습니다.

편집

requesterIp = request.getRemoteAddr()

allowedHostname 당신의 serlvet 컨테이너 또는 애플리케이션 서버가 프록시 뒤에 가능성이 높습니다

답변

0

백엔드 UI에서 설정 미리 정의 된 URL을 =. 올바른 주소를 얻으려면 원격 IP 주소를 전달하도록 프록시를 구성해야합니다.

String getRemoteAddr()

http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html는 요청을 보낸 클라이언트 또는 마지막 프록시의 인터넷 프로토콜 (IP) 주소를 돌려줍니다.