精华内容
下载资源
问答
  • IpUtil工具类--通过request获取IP,通过IP获取地址(需要联网,调用淘宝的IP库)。使用场景:在网站开发记录用户增删改查日志的时候,往往需要记录操作人的IP地址,来准确的生成操作日志记录等
  • 主要介绍了Java中使用HttpRequest获取用户真实IP地址,使用本文方法可以避免Apache、Squid、nginx等反向代理软件导致的非真实IP地址,需要的朋友可以参考下
  • Java 通过Request请求获取IP地址

    万次阅读 多人点赞 2017-05-14 11:21:12
    Java 通过Request请求获取IP地址项目需要将不同省份的用户,展示不同内容,所以需要通过Request请求获取IP地址。先来贴代码, 如果你要在生产环境使用就直接拿去用吧,我这边已经上线了。代码public class ...

    Java 通过Request请求获取IP地址

    项目需要将不同省份的用户,展示不同内容,所以需要通过Request请求获取IP地址。

    先来贴代码, 如果你要在生产环境使用就直接拿去用吧,我这边已经上线了。

    代码

    public class IpAddressUtil {
        /**
         * 获取Ip地址
         * @param request
         * @return
         */
        private static String getIpAddress(HttpServletRequest request) {
            String Xip = request.getHeader("X-Real-IP");
            String XFor = request.getHeader("X-Forwarded-For");
            if(StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)){
                //多次反向代理后会有多个ip值,第一个ip才是真实ip
                int index = XFor.indexOf(",");
                if(index != -1){
                    return XFor.substring(0,index);
                }else{
                    return XFor;
                }
            }
            XFor = Xip;
            if(StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)){
                return XFor;
            }
            if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
                XFor = request.getHeader("Proxy-Client-IP");
            }
            if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
                XFor = request.getHeader("WL-Proxy-Client-IP");
            }
            if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
                XFor = request.getHeader("HTTP_CLIENT_IP");
            }
            if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
                XFor = request.getHeader("HTTP_X_FORWARDED_FOR");
            }
            if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
                XFor = request.getRemoteAddr();
            }
            return XFor;
        }
    }
    

    详解

    首先,我们获取 X-Forwarded-For 中第0位的IP地址,它就是在HTTP扩展协议中能表示真实的客户端IP。具体就像这样:

    X-Forwarded-For: client, proxy1, proxy2,proxy…

    所以你应该知道为什么要取第0位了吧!
    如果 X-Forwarded-For 获取不到,就去获取X-Real-IPX-Real-IP 获取不到,就依次获取Proxy-Client-IPWL-Proxy-Client-IPHTTP_CLIENT_IPHTTP_X_FORWARDED_FOR 。最后获取不到才通过request.getRemoteAddr()获取IP,

    X-Real-IP 就是记录请求的客户端真实IP。跟X-Forwarded-For 类似。

    Proxy-Client-IP 顾名思义就是代理客户端的IP,如果客户端真实IP获取不到的时候,就只能获取代理客户端的IP了。

    WL-Proxy-Client-IP 是在Weblogic下获取真实IP所用的的参数。

    HTTP_CLIENT_IPHTTP_X_FORWARDED_FOR 可以理解为X-Forwarded-For , 因为它们是PHP中的用法。

    备注:
    StringUtils是Apache的工具类, pom.xml加依赖即可;也可以去Apache下载commons-lang3的最新包。

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.3.2</version>
    </dependency>
    
    展开全文
  • 之前已经给大家介绍了关于Java用Request请求获取IP地址的相关内容,那么下面这篇文章将给大家进入深入的介绍,关于Java利用Request请求如何获取IP地址对应省份、城市的相关资料,需要的朋友可以参考借鉴,下面来一起...
  • “在开发中我们经常需要获取用户IP地址,通过地址来实现一些功能,下面这篇文章主要给大家介绍了关于Java利用Request请求获取IP地址的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着...

    “在开发中我们经常需要获取用户IP地址,通过地址来实现一些功能,下面这篇文章主要给大家介绍了关于Java利用Request请求获取IP地址的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。”


    前言

    最近在项目中遇到一个需求,是需要将不同省份的用户,展示不同内容,通过查找相关的资料,发现可以通过Request请求获取IP地址,下面我们先来贴代码, 如果你要在生产环境使用就直接拿去用吧,我这边已经上线了。

    示例代码

    public class IpAdrressUtil {
     /**
      * 获取Ip地址
      * @param request
      * @return
      */
     private static String getIpAdrress(HttpServletRequest request) {
      String Xip = request.getHeader("X-Real-IP");
      String XFor = request.getHeader("X-Forwarded-For");
      if(StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)){
       //多次反向代理后会有多个ip值,第一个ip才是真实ip
       int index = XFor.indexOf(",");
       if(index != -1){
        return XFor.substring(0,index);
       }else{
        return XFor;
       }
      }
      XFor = Xip;
      if(StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)){
       return XFor;
      }
      if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
       XFor = request.getHeader("Proxy-Client-IP");
      }
      if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
       XFor = request.getHeader("WL-Proxy-Client-IP");
      }
      if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
       XFor = request.getHeader("HTTP_CLIENT_IP");
      }
      if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
       XFor = request.getHeader("HTTP_X_FORWARDED_FOR");
      }
      if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
       XFor = request.getRemoteAddr();
      }
      return XFor;
     }
    }

    ?

    代码详解

    首先,我们获取 X-Forwarded-For 中第0位的IP地址,它就是在HTTP扩展协议中能表示真实的客户端IP。具体就像这样:

    ?
    1
    X-Forwarded-For: client, proxy1, proxy2,proxy…

    所以你应该知道为什么要取第0位了吧! 

    如果 X-Forwarded-For 获取不到,就去获取X-Real-IP ,X-Real-IP 获取不到,就依次获取Proxy-Client-IP 、WL-Proxy-Client-IP 、HTTP_CLIENT_IP 、 HTTP_X_FORWARDED_FOR 。最后获取不到才通过request.getRemoteAddr()获取IP,

    X-Real-IP 就是记录请求的客户端真实IP。跟X-Forwarded-For 类似。

    Proxy-Client-IP 顾名思义就是代理客户端的IP,如果客户端真实IP获取不到的时候,就只能获取代理客户端的IP了。

    WL-Proxy-Client-IP 是在Weblogic下获取真实IP所用的的参数。

    HTTP_CLIENT_IP 与 HTTP_X_FORWARDED_FOR 可以理解为X-Forwarded-For , 因为它们是PHP中的用法。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。




    原文地址1:http://www.jb51.net/article/126931.htm

    原文地址2:http://blog.csdn.net/jinwufeiyang/article/details/52102449

    展开全文
  • Request获取用户真实IP

    千次阅读 2019-01-10 15:34:56
    在Servlet里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid,Nginx等反向代理软件就不能获取到客户端的真实IP地址了。 如果使用了反向代理...

    在Servlet里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid,Nginx等反向代理软件就不能获取到客户端的真实IP地址了。

    如果使用了反向代理软件,例如将http://192.168.101.88:80/ 的URL反向代理为http://pay.kedou.com/ 的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 或192.168.101.88,而并不是客户端的真实IP。

    如下图,原来是client端直接请求服务端,走A路线请求,这时候通过request.getRemoteAddr()方法可以准备的获取客户端的IP。但是做了代理之后呢,client端不是直接请求服务端,而是走B线路请求代理服务器,由代理器去请求服务端,这时候服务端通过request.getRemoteAddr()方法拿到的理所当然是代理服务器的地址了。

     

     

    经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问http://www.xxx.com/index.jsp/ 时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问http://192.168.1.110:2046/index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。

    下面的获取真实IP的Java类:

    /**
     * 常用获取客户端信息的工具
     * 
     */
    public final class NetworkUtil {
        /**
        * Logger for this class
        */
       private final static Logger logger = (Logger) LoggerFactory.getLogger(SysAccountController.class);
    
       /**
        * 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;
        * 
        * @param request
        * @return
        * @throws IOException
        */
       public final static String getIpAddress(HttpServletRequest request) throws IOException {
          // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
     
          String ip = request.getHeader("X-Forwarded-For");
          if (logger.isInfoEnabled()) {
             logger.info("getIpAddress(HttpServletRequest) - X-Forwarded-For - String ip=" + ip);
          }
     
          if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
             if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
                if (logger.isInfoEnabled()) {
                   logger.info("getIpAddress(HttpServletRequest) - Proxy-Client-IP - String ip=" + ip);
                }
             }
             if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
                if (logger.isInfoEnabled()) {
                   logger.info("getIpAddress(HttpServletRequest) - WL-Proxy-Client-IP - String ip=" + ip);
                }
             }
             if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
                if (logger.isInfoEnabled()) {
                   logger.info("getIpAddress(HttpServletRequest) - HTTP_CLIENT_IP - String ip=" + ip);
                }
             }
             if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
                if (logger.isInfoEnabled()) {
                   logger.info("getIpAddress(HttpServletRequest) - HTTP_X_FORWARDED_FOR - String ip=" + ip);
                }
             }
             if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
                if (logger.isInfoEnabled()) {
                   logger.info("getIpAddress(HttpServletRequest) - getRemoteAddr - String ip=" + ip);
                }
             //  以下是后期添加的 要是不想在数据库看到 0:0:0.....或者 127.0.0.1的 数字串可用下边方法 亲测           if(ip.equals("127.0.0.1") || ip.equals("0:0:0:0:0:0:0:1")){
                        //根据网卡取本机配置的IP
                        InetAddress inet=null;
                        try {
                            inet = InetAddress.getLocalHost();
                        } catch (UnknownHostException e) {
                            e.printStackTrace();
                        }
                        ip= inet.getHostAddress();
                    }
    }      } else if (ip.length() > 15) {
             String[] ips = ip.split(",");
             for (int index = 0; index < ips.length; index++) {
                String strIp = (String) ips[index];
                if (!("unknown".equalsIgnoreCase(strIp))) {
                   ip = strIp;
                   break;
                }
             }
          }
          return ip;
       }
    }

     

    调用

    public static String  getIp(){
       try {
          HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
          return NetworkUtil.getIpAddress(request);
       } catch (IOException e) {
          e.printStackTrace();
          return "";
       }
    }

     

     

     

     

     

    展开全文
  • 因为想记录客户端请求的IP地址,故记录如下所示 一、实现方式 实现方式主要分为以下两步 获取HttpServletRequest 直接看代码即可,如下所示: ServletRequestAttributes attributes = (ServletRequestAttributes)...


    前言

    因为想记录客户端请求的IP地址,故记录如下所示

    一、实现方式

    实现方式主要分为以下两步

    1. 获取HttpServletRequest
      直接看代码即可,如下所示:
    ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = attributes.getRequest();
    
    1. 获取IP地址(已考虑反向代理的情况)
      实现如下所示:
    public static String getIpAddr(HttpServletRequest request)
        {
            if (request == null)
            {
                return "unknown";
            }
            String ip = request.getHeader("x-forwarded-for");
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
            {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
            {
                ip = request.getHeader("X-Forwarded-For");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
            {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
            {
                ip = request.getHeader("X-Real-IP");
            }
    
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
            {
                ip = request.getRemoteAddr();
            }
    
            return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
        }
    

    二、总结

    都看到这里啦~说明你也和我一样热爱技术、善于发掘问题的根源,不妨给我的博客点个赞8👍

    最后我给我自己的开源项目【简帐】打个广告(后端、前端、小程序三端开源),如果star超过20个我就出一个从零开始的教程

    github地址:

    展开全文
  • java request获取IP地址

    2015-01-10 19:17:50
    Java获取IP地址:request.getRemoteAddr()警惕 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到...
  • 通过Request获取请求方的IP地址

    千次阅读 2018-03-13 14:31:51
    通过request 获取请求方的地址,使用的是request.getRemoteAddr();这个方法。但是这个请求方通过使用反向代理服务器修改请求的ip地址怎么办 。 使用反向代理服务器时,访问服务器是反向代理服务器访问的,反向代理...
  • request获取客户端IP地址

    万次阅读 2018-08-03 13:28:58
    * 从request获取请求方IP * @param request * @return */ public static String getIpAddress(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if...
  • request获取远程IP地址 public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.length() ...
  • 获取用户请求IP地址 根据IP地址获取mac地址
  • <p>What's the correct way to get all client's IP Addresses from <code>http.Request</code>? In <code>...
  • request.getPath()和获取ip地址、端口号

    千次阅读 2018-07-05 11:27:32
    project为项目名,访问路径如下: ------------http://localhost:8088/project/uploadFile   ------------/project request.getContextPath() ------------/uploadFile request.getS...
  • 获取IP地址和MAC地址

    2012-01-10 09:31:09
    java获取IP地址和MAC地址。 /** * 通过HttpServletRequest返回IP地址 * @param request HttpServletRequest * @return ip String * @throws Exception */ public String getIpAddr(HttpServletRequest ...
  • package cn.zgjkw.battalion.util; import org.apache.log4j.Logger; import javax.servlet.http.HttpServletRequest; import java.io.IOException; ... * 常用获取客户端信息的工具 * */ public final ...
  • Request中获得ip地址

    2019-08-21 17:21:16
    * 从request获取请求方IP * @param request * @return */ public static String getIpAddress(HttpServletRequest request) { String ip = request.getHeader(“x-forwarded-for”); if (ip == null || ip.length...
  • 根据用户的请求相应的真实IP地址获取请求的位置信息,包括如何获取用户的真实IP地址,以及根据真实ip获取位置信息
  • String ip = CusAccessObjectUtil.getIp(request); //获取用户ip地址 // 此方法可以实现 但是收费 暂时不用 // String s1 = QueryHelper.queryIP(ipAddress); // System.out.println(s1); //根据...
  • 获取IP地址工具类-java

    2018-11-05 17:40:50
    java获取IP地址的工具类,使用时传入HttpServletRequest request类型的参数即可。使用例子 public static void logPageError(HttpServletRequest request){IpUtils.getIpAddr(request))}
  • springboot 获取客户端IP地址方法

    千次阅读 2021-01-15 09:57:05
    在使用springboot时,需要获取访问客户端的IP地址,//获取客户端IP地址private String getIpAddress() {String ip = request.getHeader("x-forwarded-for");if(ip == null || ip.length() == 0 || "unknow"....
  • javaweb的request获取真实IP地址

    千次阅读 2017-09-01 14:37:52
    如果我们服务器使用了nginx、squid等反向代理,就不能再用request获取IP地址方法,因为这时候获取到的代理服务器的地址,是获取不到真实客户端的IP地址。 1、2访问方式是经过代理,3是直接访问服务器。经过...
  • 通过request对象获取请求ip、url等

    千次阅读 2017-03-28 09:38:01
    * 功能描述: 获取ip(兼容nginx转发) * * @param request * @return */ public static String getRemoteIp(HttpServletRequest request) { String ips = request.getHeader(NGINX_X_FORWARDED_FOR); String...
  • 如果使用了反向代理软件,将http://192.168.1.110:3306/ 的URL反向代理为http://www.8888.com/ 的URL时,用request.getRemoteAddr()方法获取IP地址是:127.0.0.1 或 192.168.1.110,而并不是客户端的真实IP。...
  • [size=medium] 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid,nginx等反向代理软件就不能获取到客户端的真实IP地址了。 如果...
  • 以下总结了两种根据HttpServletRequest请求获取发出请求浏览器客户端所在服务器的IP地址方法: 代码: import javax.servlet.http.HttpServletRequest; /** * 根据HttpServletRequest请求获取发出请求...
  • 首先用户登录后,我们可以通过HttpServletRequest的request对象获取用户IP,但这些IP不一定是用户的真实IP。 下面是一些常见请求头: X-Forwarded-For:Squid 服务代理 Proxy-Client-IP:apache 服务代理 WL-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 169,805
精华内容 67,922
关键字:

request获取ip地址