Java-获取真实用户ip
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的更多相关文章
- Java获取登录用户IP地址
/** * 获取登录用户IP地址 * * @param request * @return */ public static String getIpAddr(HttpServletRequest r ...
- Java获取真实的IP地址--转载
// 获取真实IP的方法() public String getIpAddr() { String ip = request.getHeader("x-forwarded-for" ...
- java获取真实的ip地址
直接上代码,获取请求主机的IP地址,如果通过代理进来,则透过防火墙获取真实IP地址 public class IPUtil { private static final Logger logger = ...
- nginx后的tomcat获取真实用户ip
目前大部分获取ip的方式:beat.getRequest().getRemoteAddr()但是,如果通过nginx反向代理的话,就获取不到真实ip,是获取的nginx的ip 需要:添加 pro ...
- java获取真实的IP地址工具类
在实际项目中,有调用微信支付完成支付功能,在微信支付的请求参数中需要传递一个本机的ip地址,java代码运行环境目前为windows10以及centos7. 以下为获取ip地址工具类: package ...
- 使用nginx代理后以及配置https后,如何获取真实的ip地址
使用nginx代理后以及配置https后,如何获取真实的ip地址 Date:2018-8-27 14:15:51 使用nginx, apache等反向代理后,如果想获取请求的真实ip,要在nginx中 ...
- nginx经过多层代理后获取真实来源ip
nginx取 $remote_addr 当做真实ip,而事实上,$http_X_Forwarded_For 才是用户真实ip,$remote_addr只是代理上一层的地址 解决方案: 在 http 模 ...
- PHP 获取客户端用户 IP 地址
一般情况下可以使用以下代码获取到用户 IP 地址 echo 'User IP - '.$_SERVER['REMOTE_ADDR']; // 服务器在局域网的话,那么显示的则是内网IP .// 如果服 ...
- java获取本机IP地址
转载自:http://blog.csdn.net/thunder09/article/details/5360251 在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一 ...
- java获取本机ip(排除虚拟机等一些ip)最终解,总算找到方法了
本文参考https://blog.csdn.net/u011809209/article/details/77236602 本文参考https://blog.csdn.net/yinshuomail/ ...
随机推荐
- linux基础(部分讲解)
linux常见岗位 Linux运维工程师.Linux高级架构师.运维开发工程师.数据库管理员.云计算架构师 作为python后端可以从事的linux岗位: 自动化运维.容器运维.DBA 注意:会的越多 ...
- Windows10下yolov8 tensorrt模型加速部署【实战】
Windows10下yolov8 tensorrt模型加速部署[实战] TensorRT-Alpha基于tensorrt+cuda c++实现模型end2end的gpu加速,支持win10.linux ...
- 朋友圈那串神秘字符背后的开源项目「GitHub 热点速览」
如果你这周没刷到类似 "npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237..." 的一串字符,那就说明本期 GitHub T ...
- JavaScript五花八门的跳转方式
我们最常见的跳转方式是location.href = "http://www.baidu.com", 这种是最常见的,但是常常使用location.replace,location ...
- python生成自动化测试报告并发送到指定邮箱
#-*-coding:utf-8 -*- import HTMLTestRunner import unittest import time import sys import os import s ...
- 浅谈Python中的with,可能有你不知道的
Python中的with,没那么简单,虽然也不难 https://docs.python.org/zh-cn/3.9/reference/compound_stmts.html#the-with-st ...
- Python分析睡眠数据
在19年11月的时候买了一个运动手环,然后时不时会用它来记录睡眠数据:积累到现在已经有40个月了.现在想要调整作息,分析一下这些数据,来制定合理的作息计划. 图1 月平均入睡时间 从图1可以看出,我最 ...
- C++ 从数组中拿值,每个值不相同
代码和思路 原理就是生成0,n个索引,每个索引不相同即可. 索引再到数组拿数据就行 #include <iostream> #include <vector> #include ...
- SpringBoot 整合Thymeleaf 、Thymeleaf常用标签
springboot 整合Thymeleaf Thymeleaf是目前流行的视图层的技术,Spring boot 官方推荐的使用Thymeleaf 什么是Thymeleaf? Thymeleaf是一个 ...
- Technique to Read Source Code
Technique to Read Source Code Excerpted from http://ruby-hacking-guide.github.io/intro.htm Any progr ...