获取客户端用户真实ip方法整理(jekyll迁移)
layout: post
title: 获取客户端用户真实ip方法整理
date: 2019-08-22
author: xiepl1997
tags: springboot
由请求获取客户端ip地址的方法是request.getRemoteAddr(),在大部分的情况下该方法是有效的,但是在通过了apache、squid等反向代理软件就不能获取到客户端的真实ip了。
经过代理后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿取到用户的ip地址,服务器端应用也无法直接通过转发请求的地址返回给客户端。但在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息,用以跟踪原有客户端ip地址和原来客户端的请求的服务器地址。
获取客户端真实ip地址的方法如下
/**
* @param request
* @return 返回用户的IP地址
*/
public String getUserIp(HttpServletRequest request){
String ip = request.getHeader("X-Forwarded-For");
if(ip == null || ip.length() == 0 || "unknow".equalsIgnoreCase(ip)){
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknow".equalsIgnoreCase(ip)){
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknow".equalsIgnoreCase(ip)){
ip = request.getHeader("HTTP_CLIENT_IP");
}
if(ip == null || ip.length() == 0 || "unknow".equalsIgnoreCase(ip)){
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if(ip == null || ip.length() == 0 || "unknow".equalsIgnoreCase(ip)){
ip = request.getRemoteAddr();
}
return ip;
}
这些请求头的意思:
- X-Forwarded-For
这是一个 Squid 开发的字段,只有在通过了HTTP代理或者负载均衡服务器时才会添加该项。 - Proxy-Client-IP/WL- Proxy-Client-IP
这个一般是经过apache http服务器的请求才会有,用apache http做代理时一般会加上Proxy-Client-IP请求头,而WL-Proxy-Client-IP是他的weblogic插件加上的头。 - HTTP_CLIENT_IP
有些代理服务器会加上此请求头。
(2019-08-24 补)
测试的时候因为用到自己电脑测试,于是用上诉方法会得到127.0.0.1的本地环回地址,为了获取到本机的ip地址,加上以下代码
if(ip.equals("127.0.0.1")){
//根据网卡获取ip
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
}catch (UnknownHostException e){
e.printStackTrace();
}
ip = inet.getHostAddress();
}
获取客户端用户真实ip方法整理(jekyll迁移)的更多相关文章
- 通过Request获取客户端的真实IP
我们在做项目的时候经常需要获取客户端的真实ip去进行判断,为此搜索了相关文章,以下这个讲解的比较明白,直接拿来 https://blog.csdn.net/yin_jw/article/details ...
- java代码获取客户端的真实ip
java代码获取客户端的真实ip protected String getIpAddr(HttpServletRequest request) { String ip = request.getHea ...
- Java正确获取客户端真实IP方法整理
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- 干货:Java正确获取客户端真实IP方法整理
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- 通过HttpservletRequest对象获取客户端的真实IP地址
这篇文章主要介绍了Java中使用HttpRequest获取用户真实IP地址,使用本文方法可以避免Apache.Squid.nginx等反向代理软件导致的非真实IP地址,需要的朋友可以参考下 在JSP里 ...
- PHP获取客户端的真实IP
REMOTE_ADDR只能获取访问者本地连接中设置的IP,如中南民族大学校园网中自己设置的10.X.XXX.XXX系列IP,而这个函数获取的是局域网网关出口的IP地址, 如果访问者使用代理服务器,将不 ...
- 服务器使用nginx做代理,通过HttpServletRequest获取请求用户真实IP地址
首先,在nginx配置中添加如下配置 server { listen ; server_name www.wenki.info; #要访问的域名 charset utf8; location / { ...
- Nginx 负载均衡 后端服务器获取前端用户真实IP
Nginx 后端 日志文件 获取的都是 前端 负载均衡器的IP 想要获取用户的真实IP 必须 使用Nginx 的模块 http_realip_module 才行!! 1. 编译 Nginx 的时候 ...
- php 获取客户端的真实ip地址 通过第三方网站
<?php include 'simple_html_dom.php'; // 1获取真实IP地址方式 function get_onlineip() { $ch = curl_init('ht ...
随机推荐
- STL源码剖析:迭代器
准备知识 什么是迭代器? 迭代器是链接容器和算法的桥梁,所有的算法都通过迭代器操作容器中的数据 迭代器是一种智能指针,最重要的操作符重载就是operator*,operator-> 迭代器的实现 ...
- 【Kafka】Kafka测试时控制台日志级别修改
在学习Kafka客户端时日志打的飞起,根本看不到自己发的消息,找了半天网上竟然没有这方面的资料.想了下依赖关系,这里应该只要把slf4j的日志级别调整应该就ok了. static { LoggerCo ...
- P1852 跳跳棋 [LCA思想+二分答案]
题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有\(3\)颗棋子,分别在\(a,b,c\)这三个位置.我们要通过最少的跳动 ...
- java基础(一)注释
注释的三方方式: 1.多行注释 /* 多行注释01 多行注释02 多行注释03 */
- 安装nginx1.10和状态模块
环境 操作系统: Centos7.2 内核: 3.10.0-327.el7.x86_64 nginx: nginx-1.10.0.tar.gz 安装: 1.安装依赖包 yum -y install g ...
- 面试(JS篇)
1.js基本类型 Boolean,Number,String,Null,Undefined,Symbol. 2.null非对象,但是typeof null 返回的是Object,原因遗留下来的一个bu ...
- PHP date_parse() 函数
------------恢复内容开始------------ 实例 返回一个包含指定日期的详细信息的关联数组: <?phpprint_r(date_parse("2013-05-01 ...
- PHP crc32() 函数
实例 输出 crc32() 的结果:高佣联盟 www.cgewang.com <?php $str = crc32("Hello World!"); printf(" ...
- luogu P3264 [JLOI2015]管道连接
LINK:管道连接 一张无向图 有P个关键点 其中有K个集合 各个集合要在图中形成联通块 边有边权 求最小代价. 其实还是生成树问题 某个点要和某个点要在生成树中 类似这个意思. 可以发现 是斯坦纳树 ...
- Electron~增量更新
增量更新说明文档 English Version 提前准备 准备本地或者远程服务器或者远程静态文件url npm i -g http-server cd yourFileFolder // 进入任意文 ...