Java-获取真实用户ip
2024-09-08 17:08:31
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属性中.
最新文章
- python核心编程学习记录之映射和集合类型
- [Spring] - 读写分离
- Android IOS WebRTC 音视频开发总结(四八)-- 从商业和技术的角度看视频行业的机会
- Oracle 10g 默认安装带来的用户名/密码
- C# ToString常用技巧总结
- [ES6] for..in &;&; for..of
- iOS 四种延时的方法
- 一份关于jvm内存调优及原理的学习笔记
- 重复T次的LIS的dp Codeforces Round #323 (Div. 2) D
- Sanatorium
- 篇4 		安卓app自动化测试-Appium API进阶
- spring core 与 context理解
- 恶补web之八:jQuery(1)
- vue脚手架工具
- vue的事件处理梳理
- Java:ConcurrentLinkedQueue的实现原理分析
- 【BZOJ4832】抵制克苏恩(矩阵快速幂,动态规划)
- jQuery对url的操作
- Win8.1 查看 “Windows 体验指数“
- git 彻底删除历史记录中的大文件