java 获取用户的ip都是 127.0.0.1

摘要:
通过nginx反向代理,当Java获得IP地址时,它总是得到127.0.0.1。原因是nginx请求时没有请求信息。设置nginx转发时,可以携带请求信息。“未知”。equalsIgnoreCase){//在多个反向代理之后,将有多个IP值。第一个IP是真正的ipif(IP.indexOf(“,”)!
通过nginx反向代理,java获取ip地址时,总是127.0.0.1。是因为nginx请求的时候没有带有
request信息,设置nginx转发的时候,带上request的信息就可以了。

java代码:
    /**
     * 先从反向代理里找IP
     *
     * @param request
     * @return
     */
    public static String getIp(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
            // 多次反向代理后会有多个ip值,第一个ip才是真实ip
            if (ip.indexOf(",") != -1) {
                ip = ip.split(",")[0];
            }
        }
        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("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        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();
        }
        if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) {
            try {
                ip = InetAddress.getLocalHost().getHostAddress();
            } catch (Exception e) {
                ip = "";
            }
        }
        System.out.println("获取客户端ip: " + ip);
        return ip;
    }

nginx配置:

location / {
    proxy_set_header x-forwarded-for  $remote_addr;
}

免责声明:文章转载自《java 获取用户的ip都是 127.0.0.1》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Vim 注释多行js Math方法说明下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转贴]彻底解决 CrystalReports 登录失败问题。

目录:一、Crystal Reports 9 最新补丁下载(搜集:海波.NET)二、原因1:文件夹 NTFS 权限的问题。三、原因2:PULL 模式,水晶报表中的数据库登录问题(非 Windows 集成身份验证)。四、原因3:PUSH 模式设置了 TableLogOnInfo,不需要!五、出错:部署到其它计算机,产生问题:连接失败。错误的登录参数。六、安全...

[小程序]微信小程序登陆并获取用户信息

1.小程序js端调用框架登陆API,获取到一个临时code,拿着这个code去调用自己的服务端接口 2.在自己的服务器端,使用app_id app_secrect code可以获取到用户的openid,这个id是用户唯一的id并且不会改变,可以把这个id返回给小程序端小程序端本地保存openid 3.获取用户信息很简单,并且不需要自己的服务器处理,只需要小...

Android之 MTP框架和流程分析

概要 本文的目的是介绍Android系统中MTP的一些相关知识。主要的内容包括:第1部分 MTP简介对Mtp协议进行简单的介绍。第2部分 MTP框架介绍Android系统下MTP的框架。第3部分 MTP启动流程详细分析MTP服务的启动流程,包括Java层, JNI层, kernel相关知识的介绍。第4部分 MTP协议之I->R流程以"PC中打开一个M...

第一个微信小程序——实现获取用户信息替换用户名和头像到首页

一、创建小程序 略 二、形成空白文件 点击打开目录 删除除了project.config.json(项目配置文件)以外所有文件。 新建“app.json” 接下来我们在app.json中写入配置 {} 保存,我们可以看到编译器报错,因为目前文件为空 三、小程序页面路径配置 首先在app.json中写入 { "pages": [ "pag...

微信小程序高级基础

微信小程序高级基础 微信小程序的注册和服务器配置: 小程序是什么呢?小程序是一种不需要下载安装就可以使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或者搜一下就可以打开应用,也体现了龙哥"用完即走"的理念,用户不用关心是否安装太多应用的问题,应用将无处不在,随时可用,而且又不用安装卸载。 微信小程序其实是微信提高了自身对于HTML5特性支持的能力,...

获取用户IP地址,防钓鱼

为了防止网站钓鱼,我们需要对用户的IP地址进行分析处理,可是用户也有可能通过代理方式进行操作,那么该如何获取到用户的IP地址呢? 摘自网络上的代码: 1 public staticString getClientIP(HttpServletRequest httpservletrequest) { 2 if (httpservletrequest =...