zoukankan      html  css  js  c++  java
  • 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"/>

  • 相关阅读:
    bwapp之xss(blog)
    渗透测试平台bwapp简单介绍及安装
    用glob()函数返回目录下的子文件以及子目录
    常见编码解码脚本
    生成以指定字符为开头的md5值(6位数字)
    从1到n的阶乘的和(python)
    python循环解码base64
    BASE64编码原理分析脚本实现及逆向案例
    史上最完整的MySQL注入
    初探APT攻击
  • 原文地址:https://www.cnblogs.com/ytfcz/p/4837762.html
Copyright © 2011-2022 走看看