gpt4 book ai didi

java - Apache 代理隐藏了 HttpServletRequest 对象的远程 IP 地址

转载 作者:行者123 更新时间:2023-11-29 04:38:05 25 4
gpt4 key购买 nike

我正在用 Java 编写一个应用程序,该应用程序为网页提供来自底层数据库的数据。我根据一些 IP 限制限制对网页的访问。基本上,任何落入“已接受”范围内的 IP 都将被允许访问该网页,而该范围之外的任何 IP 都将被重定向到错误页面。要获取尝试访问该页面的用户的 IP 地址,我使用以下命令:

String userIPAddress = request.getRemoteAddr();

“请求”是我的 HttpServletRequest 对象。

我遇到的问题是此网页是通过 Apache Web 服务器代理的。

发生这种情况时,它会丢失客户端 IP 地址并采用我们防火墙的 IP 地址。因此,当我访问 request.getRemoteAddr() 时,无论客户尝试从何处访问网页,它都会返回相同的 IP。

当通过直接 IP 地址在内部访问网页时,我的 IP 检查工作正常。当您通过代理访问时,问题就出现了。

是否可以通过编程方式访问客户端的实际 IP 地址?或者这是必须通过 Apache Web 服务器完成/更改以允许此信息通过的事情吗?在那种情况下,如果那是一个更好的论坛,我可以发帖到 Server Fault。

非常感谢您的帮助。

最好的问候。

最佳答案

当以反向代理模式运行时(例如使用 ProxyPass 指令),Apache mod_proxy_http添加几个请求 header 以便将信息传递给源服务器,其中之一是 X-Forwarded-For,它将包含客户端的 IP 地址。

请记住,如果原始请求已经包含此 header (这一点并不罕见),Apache 会将客户端 IP 地址附加到现有值,因此您将获得以逗号+空格分隔的 IP 地址列表.最后(最右边)的 IP 地址始终是连接到最后一个代理(您的 Apache)的 IP 地址,这意味着这是您要测试的代理。

关于java - Apache 代理隐藏了 HttpServletRequest 对象的远程 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40386578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com