问题是这两个功能
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。