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; }
加上面面的配置,问题解决!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Java中使用HttpRequest获取用户真实IP地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid,nginx等反向代理软件就不能获取到客户端的真实IP地址了. 如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为 http://www.jb51.net / 的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 或 192.168.1.110
-
浅谈使用Java Web获取客户端真实IP的方法示例详解
Java-Web获取客户端真实IP: 发生的场景:服务器端接收客户端请求的时候,一般需要进行签名验证,客户端IP限定等情况,在进行客户端IP限定的时候,需要首先获取该真实的IP. 一般分为两种情况: 方式一.客户端未经过代理,直接访问服务器端(nginx,squid,haproxy): 方式二.客户端通过多级代理,最终到达服务器端(nginx,squid,haproxy): 客户端请求信息都包含在HttpServletRequest中,可以通过方法getRemoteAddr()获得该客户端IP.
-
Java获取电脑真实IP地址的示例代码
/** * @author yins * @date 2018年8月12日下午9:53:58 */ import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; /** * 获取本地真正的IP地址,即获得有线或者无线WiFi地址. * 过滤虚拟机.蓝
-
java 获取服务器真实IP的实例
java 获取服务器真实IP的实例 前言: 根据操作系统的不同,获取的结果不同,故需要区分系统,分别获取 实现代码: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.io.UnsupportedEncodingExcept
-
Java实现获取客户端真实IP方法小结
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了.如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP. 经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请
-
基于java配置nginx获取真实IP代码实例
1.java代码 /** 获取客户端IP */ public static final String getClientIp(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)|| "127.0.0.1".equals
-
Java面试之如何获取客户端真实IP
前言 在进行一些小游戏开发时,我们经常比较关注的一个功能便是分享.针对分享,我们希望能根据各个城市或者地区,能有不同的分享文案,辨识地区的功能如果由服务器来完成的话,我们就需要知道客户端的真实IP.今天我们就来看看服务器是如何获取到客户端的真实IP的. <!-- more --> nginx配置 首先,一个请求肯定是可以分为请求头和请求体的,而我们客户端的IP地址信息一般都是存储在请求头里的.如果你的服务器有用Nginx做负载均衡的话,你需要在你的location里面配置X-Real-IP和X
-
Java获取客户端真实IP地址过程解析
这篇文章主要介绍了Java获取客户端真实IP地址过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 业务背景 服务器端接收客户端请求的时候,一般需要进行签名验证,客户端IP限定等拦截,在进行IP限定的时候就需要获取客户端真实的IP. 基础知识 访问服务端的方式一般分为两种: 未经过代理,直接访问服务器端: 通过多级代理,最终到达服务器端(nginx,squid,haproxy). 客户端请求信息都包含在HttpServletRequest中
-
Java无法获取真实IP解决方案
问题 最近在写博客浏览量的时候,设计了这么一个逻辑:同一个IP浏览一遍文章,5分钟内不刷新次数.就需要在服务器端得到用户的真实IP,我代码是这样写的(从网上找的方法): public static String getRealIp(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); String unknown = "unknown"; if (ip == n
-
JAVA如何获取客户端IP地址和MAC地址
本文介绍了JAVA如何获取客户端IP地址和MAC地址 ,分享给大家,具体如下: 1.获取客户端IP地址 public String getIp(HttpServletRequest request) throws Exception { String ip = request.getHeader("X-Forwarded-For"); if (ip != null) { if (!ip.isEmpty() && !"unKnown".equalsIg
-
基于Nginx 反向代理获取真实IP的问题详解
一.前言 前文Nginx 解决WebApi跨域二次请求以及Vue单页面问题 当中虽然解决了跨域问题带来的二次请求,但也产生了一个新的问题,就是如果需要获取用户IP的时候,获取的IP地址总是本机地址. 二.原因 由于Nginx反向代理后,在应用中取得的IP都是反向代理服务器的IP,取得的域名也是反向代理配置的Url的域名. 三.解决方案 解决该问题,需要在Nginx反向代理配置中添加一些配置信息,目的将客户端的真实IP和域名传递到应用程序中.同时,也要修改获取IP地址的方法. 但是需要注意的是,通
-
Apache 获取真实ip的配置的实现方法
Apache 获取真实ip的配置的实现方法 最近因为用了web应用防火墙产品(阿里云的),所以获取不到用户的真实ip. 经过多方搜集尝试,方案如下: apache2.4提供了自带的remoteip模块可以实现获取真实ip. 我的环境是:ubunt16.04 Apache2.4.18 cd /etc/apache2.mods-available 新建配置文件 vim remoteip.conf 输入: RemoteIPHeader X-Forwarded-For RemoteIPProxiesHe
-
JS绕过代理、VPN获取真实IP及内网IP,逆向追踪的实现方法
Firefox 跟 Chrome支持WebRTC可以向STUN服务器请求,返回内外网IP,不同于XMLHttpRequest请求,STUN请求开发者工具当中看不到网络请求的. //get the IP addresses associated with an account function getIPs(callback) { var ip_dups = {}; //compatibility for firefox and chrome var RTCPeerConnection = win
-
asp.net(vb.net)获取真实IP的函数
aspx vb.net获取真实IP的函数如下: 复制代码 代码如下: <script runat="server"> Public Function CheckIp(ByVal ip As String) As Boolean Dim pat As String = "^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$" Dim reg As Regex = New Regex(pat) if ip = "
-
C#获取真实IP地址实现方法
本文实例讲述了C#获取真实IP地址实现方法,分享给大家供大家参考.具体实现方法如下: 通常来说,大家获取用户IP地址常用的方法是: 复制代码 代码如下: string IpAddress = ""; if((HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]!=null && HttpContext.Current.Request.ServerVariables[&q
-
asp.net获取真实ip的方法
本文实例讲述了asp.net获取真实ip的方法.分享给大家供大家参考.具体如下: public string getip() { string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (null == result || result == String.Empty) { result = HttpContext.Current.Request.ServerVari
-
C#获取真实IP地址(IP转为长整形、判断是否内网IP的方法)
今天查看登录日志,发现http_x_forwarded_for获取到的ip地址有些是内网ip地址,有些则是公网和内网ip地址一起获取到,用逗号分隔开,日志截图如下: 之前获取ip地址的C#代码如下: 复制代码 代码如下: /// <summary> /// C#获取客户端真实IP地址 /// </summary> /// <returns></returns> public static string GetIP()
随机推荐
- SQL中代替Like语句的另一种写法
- Jquery实现简单的轮播效果(代码管用)
- 使用ngView配合AngularJS应用实现动画效果的方法
- 星外虚拟主机访问被控出现Unspecified error解决方法
- 有关商业网站的建立和运作
- java.net.MalformedURLException异常的解决方法
- 简单纯js实现点击切换TAB标签实例
- CodeIgniter配置之autoload.php自动加载用法分析
- java struts常见错误以及原因分析
- php的mssql数据库连接类实例
- php实现设计模式中的单例模式详解
- 详解vue.js全局组件和局部组件
- ES6新特性之变量和字符串用法示例
- jsp倒计时简单实现方法
- 利用Apache服务器屏蔽广告及IP段的一般方法
- 举例讲解Java的Spring框架中AOP程序设计方式的使用
- java list 比较详解及实例
- PHP英文字母大小写转换函数小结
- 浅析Android 手机卫士设备管理权限锁屏
- Java8中stream和functional interface的配合使用详解