验证请求主机

时间:2013-07-08 07:06:08

标签: java rest

我正在开发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 =在后端UI中设置的预定义URL

1 个答案:

答案 0 :(得分:0)

您的serlvet容器或应用程序服务器很可能位于代理服务器后面。要获取正确的地址,您需要配置代理以转发远程IP地址。

http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html

String getRemoteAddr()

  

返回发送请求的客户端或最后一个代理的Internet协议(IP)地址。