Java无法获取真实IP解决方案

 更新时间:2020年12月10日 09:22:51   作者:码农记事本  
这篇文章主要介绍了Java无法获取真实IP解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

问题

最近在写博客浏览量的时候,设计了这么一个逻辑:同一个IP浏览一遍文章,5分钟内不刷新次数。就需要在服务器端得到用户的真实IP,我代码是这样写的(从网上找的方法):

public static String getRealIp(HttpServletRequest request) {
	String ip = request.getHeader("x-forwarded-for");
	String unknown = "unknown";
	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.getRemoteAddr();
	}
	return ip;
}

发现得到的IP总172开头的IP,我查了下是本地局域网的IP,我的项目又是docker布署的,这又记我联想到docker内部的IP。。。

解决办法

最后才发现nginx代理接口的时候,需要做获取IP的配置

location ^~ /api {
  proxy_pass http://127.0.0.1:8110/;
  proxy_read_timeout 90;
  #得到请求真实IP
  proxy_set_header  X-Real-IP    $remote_addr;
  proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header  HTTP_X_FORWARDED_FOR $remote_addr;
  proxy_set_header  X-Forwarded-Proto $scheme;
  proxy_redirect   default;

}

加上面面的配置,问题解决!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • httpclient 请求http数据,json转map的实例

    httpclient 请求http数据,json转map的实例

    下面小编就为大家带来一篇httpclient 请求http数据,json转map的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • Mybatis逆向工程实现连接MySQL数据库

    Mybatis逆向工程实现连接MySQL数据库

    本文主要介绍了Mybatis逆向工程实现连接MySQL数据库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • MyBatis传入集合 list 数组 map参数的写法

    MyBatis传入集合 list 数组 map参数的写法

    这篇文章主要介绍了MyBatis传入集合 list 数组 map参数的写法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Java通过BCrypt加密过程详解

    Java通过BCrypt加密过程详解

    这篇文章主要介绍了Java通过BCrypt加密过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 在idea2023中使用SpringBoot整合Lombok全过程及详细用法

    在idea2023中使用SpringBoot整合Lombok全过程及详细用法

    Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能,本文详细给大家介绍了在idea2023中使用SpringBoot整合Lombok全过程及详细用法,需要的朋友可以参考下
    2023-09-09
  • MyEclipse2017创建Spring项目的方法

    MyEclipse2017创建Spring项目的方法

    这篇文章主要为大家详细介绍了MyEclipse2017创建Spring项目的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • SpringBoot中的RabbitMQ用法详解

    SpringBoot中的RabbitMQ用法详解

    RabbitMQ是一个开源的消息队列系统,它通过AMQP(高级消息队列协议)来实现消息的传递,SpringBoot是目前非常流行的Java开发框架,它提供了很多便利性的功能,其中就包括对RabbitMQ的支持,在本文中,我们将介绍如何在SpringBoot中使用RabbitMQ
    2023-07-07
  • java LeetCode题解不同路径

    java LeetCode题解不同路径

    这篇文章主要为大家介绍了java LeetCode题解不同路径示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Mybatis之#{}与${}的区别使用详解

    Mybatis之#{}与${}的区别使用详解

    这篇文章主要介绍了Mybatis之#{}与${}的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • java操作excel表格详解

    java操作excel表格详解

    在日常工作中,对Excel工作表格的操作处理可是多的数不清楚,下面是java语言对其的操作,有需要的小伙伴可以参考下
    2021-10-10

最新评论