- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
根据我的理解,以下代码返回错误:
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/
我正在尝试查找客户端的 IP。我被告知 'request.getHeader("HTTP_X_FORWARDED_FOR")' 不可信任,因为它可能是伪造的,我应该改用 request.getRemo
这个问题已经有答案了: How do I get the remote address of a client in servlet? (11 个回答) 已关闭 7 年前。 我们需要通过 Seam 操
我现在正在学习 JSP。我试图测试一个非常简单的示例 JSP 文件,里面只有一行代码:...... 我检查了这个 JSP 文件,它运行良好,为我提供了预期的信息。但是,只有上面的代码输出在不同的浏览器
@RequestMapping(value = "/origin/test/", method = RequestMethod.GET, headers = "Accept=application/j
根据我的理解,以下代码返回错误: HttpServletRequest httpRequest = (HttpServletRequest) request; String userIPAddress
ServletRequest.getRemoteAddr() 的 Javadoc没有提及返回的 IP 地址的格式。这在实现过滤器时很烦人。我们可以指望什么?有没有可以依赖的官方规范?谢谢。 最佳答案
这个问题已经有答案了: How do I get the remote address of a client in servlet? (11 个回答) 已关闭 7 年前。 我正在使用 tomcat
为什么 HttpServletRequest.getRemoteAddr()返回 null 有时? 10 个相同的请求中大约有 2 个会无缘无故返回 null。 最佳答案 使用 Tomcat7。显然
我正在进行 API 调用,该调用需要请求 IP 地址。我正在使用 ServletRequest.getRemoteAddr() 来获取请求的 IP。对于一位用户,getRemoteAddr() 返回的
ServletRequest.getRemoteAddr() 是否有理由将客户端 IP 地址作为字符串而不是 int/long/IPSomethingInstance 返回? 或者换个方式问:有没有g
我有一个 jsp 网络应用程序。我正在使用代码设置隐藏输入的值 request.getRemoteAddr() 填写客户端的IP地址。当我的 webapp 部署在 tomacat/windows 上时
在我的 Tomcat 托管网络应用程序中,doGet(...) 方法的前两行是: String ip = request.getRemoteAddr(); System.out.println("ip
我有 Spring MVC 应用程序,托管在 Tomcat 容器中。 Tomcat 以 NginX 为前端,因此我在 NginX 配置中明确设置了 header : location / { prox
这个问题在这里已经有了答案: How do I get the remote address of a client in servlet? (11 个答案) 关闭 6 年前。 我正在用 java
如果我用 Java 6 运行 Tomcat 7,HttpServletRequest.getRemoteAddr() 方法会返回我期望的 IP 地址。 如果我用 Java 8 运行 Tomcat 8,
我有一个在 Tomcat 中运行的 Java servlet 应用程序,出于安全原因,我只希望能够从机器本身(或者也可能是我自己的电脑)运行一个管理命令。因此,为了强制执行此操作,我检查了我收到的 H
Tomcat 中的 HttpServletRequest.getRemoteAddr() 返回 IPv6 格式的 IP 地址,但我想将其配置为返回 IPv4。 我通过“localhost”访问 ser
我用 Spring/GWT 制作了一个使用 Flash 上传文件的网络应用程序。 当我使用 GWT 发送 ajax 请求并尝试获取用户 ip 地址时,我得到一个 ipv4 地址,例如:127.0.0.
我正在尝试在我的 webApplication 中打印登录用户的 IP 地址。如果用户使用 IP 地址 192.168.10.120:8080/WebApplication 从另一台 PC(在同一网络
我正在尝试使用以下代码在 jsp 页面中获取我的 IP 地址: 这会打印 0:0:0:0:0:0:0:1,而不是我的 IP 地址。这是应该的吗?为什么它没有显示我的 IP 地址? 谢谢 最佳答案 这
我是一名优秀的程序员,十分优秀!