tomcat server获取用户的请求地址

当用户 与 tomcat之间 用 nginx做跳转时,

HttpServletRequest 中的 getRemoteHost()方法获取到的只是nginx的地址,而不能拿到用户真正的请求地址

 

解决方式 :

第一步 ,nginx 的 nginx.conf配置文件中:

location ~ ^/site {

  proxy_pass http://localhost:8088;

  proxy_set_header  X-Real-IP  $remote_addr;   // 主要添加这一句代码

}

第二步 ,服务端添加一个过滤器,主要方法如下:

public void setRemoteAddrIp(HttpServletRequest request) {

        String ipFromNginx = getHeader(request, "X-Real-IP");

        System.out.println("ipFromNginx:" + ipFromNginx);

        System.out.println("getRemoteAddr:" + request.getRemoteAddr());

        request.setAttribute("remoteIP" , StringUtils.isBlank(ipFromNginx) ? request.getRemoteAddr() : ipFromNginx);

}

private String getHeader(HttpServletRequest request, String headName) {

        String value = request.getHeader(headName);

        return !StringUtils.isBlank(value) && !"unknown".equalsIgnoreCase(value) ? value : "";

}

 

如果tomcat日志中也需要存储远程地址,在tomcat的配置文件中配置以下内容:

<Valve className="org.apache.catalina.valves.AccessLogValve"
                 directory="logs"  prefix="tomcat_access_log." suffix=".txt"
                 pattern="%a %r %t %{X-Real_IP}i" resolveHosts="false"/>

posted @ 2015-09-25 11:53  coreWars  阅读(628)  评论(0编辑  收藏  举报