gpt4 book ai didi

java - HttpServletRequest getRemoteAddr() 无法正常工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:25 24 4
gpt4 key购买 nike

根据我的理解,以下代码返回错误:

HttpServletRequest httpRequest = (HttpServletRequest) request;
String userIPAddress = httpRequest.getRemoteAddr();

// Actual
// "0:0:0:0:0:0:0:1%0"

// Expected
// "0:0:0:0:0:0:0:1"

知道为什么 %0 在那里吗?当我循环

InetAddress.getAllByName("localhost")

我得到以下信息:

// ["192.168.100.1", "127.0.0.1", "0:0:0:0:0:0:1"]

如果 getRemoteAddr() 返回无效格式,或者我做错了什么,我该如何测试本地主机?

谢谢!

最佳答案

问题是这两个函数

1) java.net.InetAddress.getAllByName(String)

2) javax.servlet.ServletRequest.getRemoteAddr()

非常不同。第一个函数是标准 Java 运行时的一部分,第二个函数由 Java EE 容器实现。您正在使用 Tomcat7,因此添加了可选区域参数 %0。

最重要的是,您不应该像现在这样对 IP 地址进行字符串比较。

您真正应该做的是使用 org.apache.catalina.filters.RemoteIpFilter。这会以明确定义的方式执行您要执行的操作。

例子:

<filter>
<filter-name>RemoteIpFilter</filter-name>
<filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
<init-param>
<param-name>allowedInternalProxies</param-name>
<param-value>192\.168\.0\.10|192\.168\.0\.11</param-value>
</init-param>
<init-param>
<param-name>remoteIpHeader</param-name>
<param-value>x-forwarded-for</param-value>
</init-param>
<init-param>
<param-name>remoteIpProxiesHeader</param-name>
<param-value>x-forwarded-by</param-value>
</init-param>
<init-param>
<param-name>protocolHeader</param-name>
<param-value>x-forwarded-proto</param-value>
</init-param>
</filter>

参见 http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Remote_IP_Filter获取更多信息。

关于java - HttpServletRequest getRemoteAddr() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12080570/

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