我有一个在 Tomcat 中运行的 Java servlet 应用程序,出于安全原因,我只想能够从机器本身(或者我自己的电脑)运行一个管理命令。因此,为了强制执行此操作,我检查了收到的 HttpServletRequest 的远程地址,但即使请求不是来自本地主机,它也始终返回 127.0.0.1
为什么会这样,我可以修复它还是有另一种方法可以仅从服务器运行我的管理命令。
我有一个在 Tomcat 中运行的 Java servlet 应用程序,出于安全原因,我只想能够从机器本身(或者我自己的电脑)运行一个管理命令。因此,为了强制执行此操作,我检查了收到的 HttpServletRequest 的远程地址,但即使请求不是来自本地主机,它也始终返回 127.0.0.1
为什么会这样,我可以修复它还是有另一种方法可以仅从服务器运行我的管理命令。
首先检查请求是否具有“X-Forwarded-For”标头。如果设置了标头,则其中的第一个 IP 应该是您要查找的 IP。如果标头为空request.getRemoteAddr()
,则应返回正确的 IP。
'X-Forwarded-For' 的 Wiki:http ://en.wikipedia.org/wiki/X-Forwarded-For
请注意,您不能 100% 确定您获得了这样的正确 IP,因为转发实例不会强制设置“X-Forwarded-For”标头。