java开发_获取访问者IP

这是在一个opensource项目中看到的获取访问者ip的方法:

 1 /**
 2      * 获取访问者IP
 3      * 
 4      * 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效。
 5      * 
 6      * 本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(用,分割),
 7      * 如果还不存在则调用Request .getRemoteAddr()。
 8      * 
 9      * @param request
10      * @return
11      */
12     public static String getIpAddr(HttpServletRequest request) {
13         String ip = request.getHeader("X-Real-IP");
14         if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
15             return ip;
16         }
17         ip = request.getHeader("X-Forwarded-For");
18         if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
19             // 多次反向代理后会有多个IP值,第一个为真实IP。
20             int index = ip.indexOf(',');
21             if (index != -1) {
22                 return ip.substring(0, index);
23             } else {
24                 return ip;
25             }
26         } else {
27             return request.getRemoteAddr();
28         }
29     }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Ryan Miao

在jfinal中使用druid,并配置查看权限

首先导入druid包,然后配置configPlugin 1 @Override 2 public void configPlugin(Plugins...

440150
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第十七天 监听器Listener【悟空教程】

当我们使用QQ时,在生日当天会收到QQ系统发送的祝福邮件。今天我们将实现相同的功能。

14740
来自专栏Java帮帮-微信公众号-技术文章全总结

Apache、struts1、struts2文件上传下载的3种方式

/*jsp的上传(导入第三方upload.jar)*/ //用Apache的SmartUpload方式上传,共5部 //1.引入SmartUpload Smar...

51270
来自专栏开发技术

shiro源码篇 - shiro的session共享,你值得拥有

    老师对小明说:"乳就是小的意思,比如乳猪就是小猪,乳名就是小名,请你用乳字造个句"     小明:"我家很穷,只能住在40平米的乳房"     老师:"...

70340
来自专栏抠抠空间

Flask之flask-session

13030
来自专栏程序猿DD

从零开始的Spring Security Oauth2(二)

本文开始从源码的层面,讲解一些spring Security Oauth2的认证流程。本文较长,适合在空余时间段观看。且涉及了较多的源码,非关键性代码以…代替。...

29060
来自专栏非著名程序员

Android 使用 ApachePOI 组件读写 Word doc 和 docx 文件

最近在项目中要生成Word的doc和docx文件,一番百度google之后,发现通过java语言实现的主流是Apache的POI组件。除了POI,这里还有另一种...

795100
来自专栏Netkiller

Nginx rewrite 获取问好“?”后面的参数

节选自 《Netkiller Web 手札》 3.2.4.1. http get 参数处理 需求如下 原理地址: http://www.netkiller.c...

29950
来自专栏技术碎碎念

servlet请求转发、包含以及重定向

请求转发: 方式一:   ServletContext对象.getRequestDispatcher(目标资源的URI).forward(request,res...

30660
来自专栏前端下午茶

Node中的事件循环和异步API

单线程编程会因阻塞I/O导致硬件资源得不到更优的使用。多线程编程也因为编程中的死锁、状态同步等问题让开发人员头痛。 Node在两者之间给出了它的解决方案:利用单...

17030

扫码关注云+社区

领取腾讯云代金券