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 = 在后端 UI 中设置的预定义 url

4

1 回答 1

0

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

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

String getRemoteAddr()

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

于 2013-07-08T07:49:11.167 回答