Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache Tomcat是否阻止客户端IP地址?_Java_Apache_Tomcat_Jakarta Ee_Servlets - Fatal编程技术网

Java Apache Tomcat是否阻止客户端IP地址?

Java Apache Tomcat是否阻止客户端IP地址?,java,apache,tomcat,jakarta-ee,servlets,Java,Apache,Tomcat,Jakarta Ee,Servlets,我已经在ip地址为10.xx.xx.90的机器上的Tomcat 6.0上部署了我的web应用程序。然后我从具有ip地址(10.xx.xx.56)的m/c向该应用程序发出http请求(从浏览器) 我正在尝试使用下面的代码在servlet筛选器中获取客户端(10.xx.xx.56)的IP地址。但是我没有在头信息和请求中获取remoteaddress参数的任何值。getRemoteAddr()返回部署应用程序的计算机的IP地址,即10.xx.xx.90。两者之间没有负载平衡器或代理 public vo

我已经在ip地址为10.xx.xx.90的机器上的Tomcat 6.0上部署了我的web应用程序。然后我从具有ip地址(10.xx.xx.56)的m/c向该应用程序发出http请求(从浏览器)

我正在尝试使用下面的代码在servlet筛选器中获取客户端(10.xx.xx.56)的IP地址。但是我没有在头信息和请求中获取remoteaddress参数的任何值。getRemoteAddr()返回部署应用程序的计算机的IP地址,即10.xx.xx.90。两者之间没有负载平衡器或代理

public void doFilter(ServletRequest request, ServletResponse response, FilterChain    chain) throws IOException,
  ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
StringBuffer ipLog = new StringBuffer("FILTER_LOG").append(httpServletRequest.getRemoteAddr());
Enumeration<String> e = httpServletRequest.getHeaderNames();
if (e != null) {
  while (e.hasMoreElements()) {
    String header = e.nextElement();
    ipLog.append(header).append(" - ").append(httpServletRequest.getHeader(header));
  }
}
System.out.println(ipLog);
public void doFilter(ServletRequest请求、ServletResponse响应、FilterChain链)抛出IOException,
ServletException{
HttpServletRequest HttpServletRequest=(HttpServletRequest)请求;
StringBuffer ipLog=newStringBuffer(“FILTER_LOG”).append(httpServletRequest.getRemoteAddr());
枚举e=httpServletRequest.getHeaderNames();
如果(e!=null){
而(e.hasMoreElements()){
字符串头=e.nextElement();
append(header).append(“-”).append(httpServletRequest.getHeader(header));
}
}
系统输出打印LN(ipLog);
Tomcat是否正在阻止或更改客户端IP地址?如果是,那么需要更改什么配置才能获得真正的客户端IP地址

提前感谢..

您实际上是通过代理连接的 正如对这个问题的评论中所指出的,客户端通过隧道连接到服务器,这意味着向服务器发出实际请求的是隧道的服务器端

这就是为什么您将本地IP设置为“remoteAddr”


让Tomcat监听公共接口或所有接口,并直接连接到服务器IP,而不是通过隧道连接。

@folkol“Tomcat 6.0”,让我们仔细阅读问题!您是在Apache后面运行Tomcat,还是在配置的端口上实际运行Tomcat?访问日志上说了什么?您能看到远程IP吗?让我重新表述一下。您使用的是Tomcat 6的确切版本?我尝试在Mac上用Tomcat 6.0.41在Java 1.7.0_60-ea上记录远程IP@AndersR.Bystrup:我正在配置端口上点击tomcat。标题信息打印为FILTER_LOG 10.xx.xx.90content-type-text/xml;charset=UTF-8accept-text/*connection-closecache-control-no cachepragma-no cachehost-10.xx.xx.90:8085content-length-1052@folkol:我正在使用apache-tomcat-6.0.20…我是hittin来自browserI的g请求在不通过隧道连接的情况下无法访问服务器机器……而且我能够在同一环境下运行的其他应用程序中使用上述方法检索客户端IP。什么样的应用程序能够区分曾经通过ssh隧道路由的HTTP请求和来自本地主机的HTTP请求?即使你有这样一个神奇的程序,问题是Tomcat是否以某种方式阻止或重新编写了客户端ip,我相信我的答案是正确的。