1 import common.util.StringUtil;
2 import org.springframework.web.bind.annotation.ModelAttribute;
3
4 import javax.servlet.http.HttpServletRequest;
5 import javax.servlet.http.HttpServletResponse;
6 import javax.servlet.http.HttpSession;
7
8 public class BaseController {
9 protected HttpServletRequest request;
10 protected HttpServletResponse response;
11 protected HttpSession session;
12
13 @ModelAttribute
14 public void setReqAndRes(HttpServletRequest request, HttpServletResponse response) {
15 this.request = request;
16 this.response = response;
17 this.session = request.getSession();
18 }
19 /**
20 * 使用nginx反向代理后获取请求端真实IP
21 * @return
22 */
23 public String getClientIP() {
24 String ip = request.getHeader("X-Forwarded-For");
25 if(!StringUtil.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)){
26 //优先考虑多重代理的情况,应该取第0位的ip值
27 System.out.println("ip=>"+ip);
28 ip = ip.split(", ")[0];
29 System.out.println("ip==>"+ip);
30
31 }
32 if (StringUtil.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
33 //目前没有遇到多重代理,一般在X-Real-IP中就能获得
34 ip = request.getHeader("X-Real-IP");
35 System.out.println("ip===>"+ip);
36 }
37 if (StringUtil.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
38 ip = request.getRemoteAddr();
39 System.out.println("ip====>"+ip);
40 }
41 return ip;
42 }
43 }

需要的业务代码继承此类,再在适当处调用其中方法即可;

PS:

  1.客户端A调用服务B,服务B调用服务C,若在服务C中以此方法获取真实ip,只能获取服务B的ip,并无法获取客户端A的ip;

  2.若想服务C中想获取客户端A的真实ip,则需服务B将客户端A的ip在请求服务C的接口中将客户端A的真实ip填入request

   的X-Forwarded-For属性中.

Java-获取真实用户ip的更多相关文章

  1. Java获取登录用户IP地址

    /** * 获取登录用户IP地址 * * @param request * @return */ public static String getIpAddr(HttpServletRequest r ...

  2. Java获取真实的IP地址--转载

    // 获取真实IP的方法() public String getIpAddr() { String ip = request.getHeader("x-forwarded-for" ...

  3. java获取真实的ip地址

    直接上代码,获取请求主机的IP地址,如果通过代理进来,则透过防火墙获取真实IP地址 public class IPUtil { private static final Logger logger = ...

  4. nginx后的tomcat获取真实用户ip

    目前大部分获取ip的方式:beat.getRequest().getRemoteAddr()但是,如果通过nginx反向代理的话,就获取不到真实ip,是获取的nginx的ip 需要:添加    pro ...

  5. java获取真实的IP地址工具类

    在实际项目中,有调用微信支付完成支付功能,在微信支付的请求参数中需要传递一个本机的ip地址,java代码运行环境目前为windows10以及centos7. 以下为获取ip地址工具类: package ...

  6. 使用nginx代理后以及配置https后,如何获取真实的ip地址

    使用nginx代理后以及配置https后,如何获取真实的ip地址 Date:2018-8-27 14:15:51 使用nginx, apache等反向代理后,如果想获取请求的真实ip,要在nginx中 ...

  7. nginx经过多层代理后获取真实来源ip

    nginx取 $remote_addr 当做真实ip,而事实上,$http_X_Forwarded_For 才是用户真实ip,$remote_addr只是代理上一层的地址 解决方案: 在 http 模 ...

  8. PHP 获取客户端用户 IP 地址

    一般情况下可以使用以下代码获取到用户 IP 地址 echo 'User IP - '.$_SERVER['REMOTE_ADDR']; // 服务器在局域网的话,那么显示的则是内网IP .// 如果服 ...

  9. java获取本机IP地址

    转载自:http://blog.csdn.net/thunder09/article/details/5360251 在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一 ...

  10. java获取本机ip(排除虚拟机等一些ip)最终解,总算找到方法了

    本文参考https://blog.csdn.net/u011809209/article/details/77236602 本文参考https://blog.csdn.net/yinshuomail/ ...

随机推荐

  1. Selenium 资源汇总

    created: 2022-8-4 驱动 资源名 网址 说明 chromedriver https://registry.npmmirror.com/binary.html?path=chromedr ...

  2. springboot输出json日志

    <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-lo ...

  3. Nginx13 openresty使用lua-resty-template

    1 简介 https://github.com/bungle/lua-resty-template 如果学习过JavaEE中的servlet和JSP的话,应该知道JSP模板最终会被翻译成Servlet ...

  4. redis06-事务

    1 基本说明 可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞. 2 事务相关的几个命令 2.1 MULTI 标记一个事务块 ...

  5. 超详细!Jmeter性能测试

    前言 性能测试是一个全栈工程师/架构师必会的技能之一,只有学会性能测试,才能根据得到的测试报告进行分析,找到系统性能的瓶颈所在,而这也是优化架构设计中重要的依据. 测试流程: 需求分析→环境搭建→测试 ...

  6. vant组件,picker时间选择,自定义时间选择,实现datePacker,时间选择长期,增加长期选项,用于选择身份证到期时间等...

    vant组件,picker时间选择,自定义时间选择,实现datePacker,时间选择长期,增加长期选项,用于选择身份证到期时间等... 最近项目中有个需求,datePicker选项,需要实现增加一个 ...

  7. libco 源码剖析(1): 协程上下文切换之 32 位

    libco 源码剖析(1): 协程上下文切换之 32 位 相关背景资料 关于汇编语言及内存布局相关基础,参看 参考文献[0], 参考文献[1] 32 位协程上下文结构如下: // coctx.h st ...

  8. Python GDAL读取栅格数据并基于质量评估波段QA对指定数据加以筛选掩膜

      本文介绍基于Python语言中gdal模块,对遥感影像数据进行栅格读取与计算,同时基于QA波段对像元加以筛选.掩膜的操作.   本文所要实现的需求具体为:现有自行计算的全球叶面积指数(LAI).t ...

  9. Linux服务器数据备份恢复

    转载csdn: https://blog.csdn.net/weixin_33794672/article/details/92894022

  10. bootstrap怎么让手机端电脑端自适应显示隐藏元素

    我用的是bootstrap v3 这是电脑端: 这是手机端: 其实很简单:我用的 visible-lg 弄了半天才发现md是中等屏幕可见,所以要用lg 代码如下: 一行一共是12,我这里有3个元素,所 ...