我正在开发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
答案 0 :(得分:0)
您的serlvet容器或应用程序服务器很可能位于代理服务器后面。要获取正确的地址,您需要配置代理以转发远程IP地址。
http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html
String getRemoteAddr()
返回发送请求的客户端或最后一个代理的Internet协议(IP)地址。