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;

}

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

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

相关文章

  • Spring JDBCTemplate原理及使用实例

    Spring JDBCTemplate原理及使用实例

    这篇文章主要介绍了Spring JDBCTemplate原理及使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 如何在springMVC的controller中获取request

    如何在springMVC的controller中获取request

    这篇文章主要介绍了如何在springMVC的controller中获取request,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • JavaFX桌面应用未响应问题解决方案

    JavaFX桌面应用未响应问题解决方案

    这篇文章主要介绍了JavaFX桌面应用未响应问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • IntelliJ IDEA 2019.3激活破解的详细方法(亲测有效,可激活至 2089 年)

    IntelliJ IDEA 2019.3激活破解的详细方法(亲测有效,可激活至 2089&

    本教程适用于 JetBrains 全系列产品,包括 Pycharm、IDEA、WebStorm、Phpstorm、Datagrip、RubyMine、CLion、AppCode 等,本教程无需修改 hosts 文件,对IntelliJ IDEA 2019.3激活破解的详细方法的相关知识感兴趣的朋友一起看看吧
    2020-09-09
  • Spring Boot Dubbo 构建分布式服务的方法

    Spring Boot Dubbo 构建分布式服务的方法

    这篇文章主要介绍了Spring Boot Dubbo 构建分布式服务的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • java开发之File类详细使用方法介绍

    java开发之File类详细使用方法介绍

    这篇文章主要介绍了java开发之File类详细使用方法介绍,需要的朋友可以参考下
    2020-02-02
  • 详述 DB2 分页查询及 Java 实现的示例

    详述 DB2 分页查询及 Java 实现的示例

    本篇文章主要介绍了详述 DB2 分页查询及 Java 实现的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • Java实现简单抽奖功能界面

    Java实现简单抽奖功能界面

    这篇文章主要为大家详细介绍了Java实现简单抽奖功能界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • Spring @Cacheable注解类内部调用失效的解决方案

    Spring @Cacheable注解类内部调用失效的解决方案

    这篇文章主要介绍了Spring @Cacheable注解类内部调用失效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 浅析Spring和MyBatis整合及逆向工程

    浅析Spring和MyBatis整合及逆向工程

    这篇文章主要介绍了Spring和MyBatis整合及逆向工程的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06

最新评论