and*_*orp 6 java servlets localhost
根据我的理解,以下代码返回错误:
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"
Run Code Online (Sandbox Code Playgroud)
知道为什么%0有吗?当我循环
InetAddress.getAllByName("localhost")
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
// ["192.168.100.1", "127.0.0.1", "0:0:0:0:0:0:1"]
Run Code Online (Sandbox Code Playgroud)
如果getRemoteAddr()返回无效格式,或者我做错了什么,我将如何测试localhost?
谢谢!
问题是这两个函数
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>
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Remote_IP_Filter。
| 归档时间: |
|
| 查看次数: |
5213 次 |
| 最近记录: |