SystemUtil Java 工具类 获取 HttpServletRequest 中的访问者的一些信息

本贴最后更新于 2884 天前,其中的信息可能已经时移世改

本文由黑壳网原创

本文来源 SystemUtil 工具类 获取 HttpServletRequest 中的访问者的一些信息 - 黑壳网
###壳叔搞笑一刻
####追我玩
一天深夜,一个年轻女子经过一家精神病院时,突然后面传来哇的一声。
女子扭头一看,一个一丝不挂的男子正在向她追来。
女子吓得拔腿就跑,后面的男人紧追不舍。
不好,前面是一条死胡同,女子万念俱灰,跪在地上哭着哀求道:你愿意干什么就干什么吧,只求你不要杀我。
男子狡黠地笑了笑说:真的?那现在你开始追我。

通过 HttpServletRequest 获取 ip 地址,浏览器版本,以及所使用的系统型号,以及所访问的网址。

其实代码非常简单,都是一些基础的,只是我给整理了一下,可以拿过去直接用。

systemUtil.java import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException; /** * Created by kzyuan on 2017/6/21. */public class SystemUtils { private static Logger logger = LoggerFactory.getLogger(SystemUtils.class); /** * 获取访问者IP * 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效。 * * 本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(用,分割), * 如果还不存在则调用Request .getRemoteAddr()。 * * @param request * @return */ public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("X-Real-IP"); if (ip != null && !"".equals(ip) && !"unknown".equalsIgnoreCase(ip)) { return ip; } ip = request.getHeader("X-Forwarded-For"); if (ip != null && !"".equals(ip) && !"unknown".equalsIgnoreCase(ip)) { // 多次反向代理后会有多个IP值,第一个为真实IP。 int index = ip.indexOf(','); if (index != -1) { return ip.substring(0, index); } else { return ip; } } else { return request.getRemoteAddr(); } } /** * 获取来访者的浏览器版本 * * @param request * @return */ public static String getRequestBrowserInfo(HttpServletRequest request) { String browserVersion = null; String header = request.getHeader("user-agent"); if (header == null || header.equals("")) { return ""; } if (header.indexOf("MSIE") > 0) { browserVersion = "IE"; } else if (header.indexOf("Firefox") > 0) { browserVersion = "Firefox"; } else if (header.indexOf("Chrome") > 0) { browserVersion = "Chrome"; } else if (header.indexOf("Safari") > 0) { browserVersion = "Safari"; } else if (header.indexOf("Camino") > 0) { browserVersion = "Camino"; } else if (header.indexOf("Konqueror") > 0) { browserVersion = "Konqueror"; } return browserVersion; } /** * 获取系统版本信息 * * @param request * @return */ public static String getRequestSystemInfo(HttpServletRequest request) { String systenInfo = null; String header = request.getHeader("user-agent"); if (header == null || header.equals("")) { return ""; } //得到用户的操作系统 if (header.indexOf("NT 6.0") > 0) { systenInfo = "Windows Vista/Server 2008"; } else if (header.indexOf("NT 5.2") > 0) { systenInfo = "Windows Server 2003"; } else if (header.indexOf("NT 5.1") > 0) { systenInfo = "Windows XP"; } else if (header.indexOf("NT 6.0") > 0) { systenInfo = "Windows Vista"; } else if (header.indexOf("NT 6.1") > 0) { systenInfo = "Windows 7"; } else if (header.indexOf("NT 6.2") > 0) { systenInfo = "Windows Slate"; } else if (header.indexOf("NT 6.3") > 0) { systenInfo = "Windows 9"; } else if (header.indexOf("NT 5") > 0) { systenInfo = "Windows 2000"; } else if (header.indexOf("NT 4") > 0) { systenInfo = "Windows NT4"; } else if (header.indexOf("Me") > 0) { systenInfo = "Windows Me"; } else if (header.indexOf("98") > 0) { systenInfo = "Windows 98"; } else if (header.indexOf("95") > 0) { systenInfo = "Windows 95"; } else if (header.indexOf("Mac") > 0) { systenInfo = "Mac"; } else if (header.indexOf("Unix") > 0) { systenInfo = "UNIX"; } else if (header.indexOf("Linux") > 0) { systenInfo = "Linux"; } else if (header.indexOf("SunOS") > 0) { systenInfo = "SunOS"; } return systenInfo; } /** * 获取来访者的主机名称 * * @param ip * @return */ public static String getHostName(String ip) { InetAddress inet = null; try { inet = InetAddress.getByName(ip); } catch (UnknownHostException e) { logger.error("UnknownHostException", e); } return inet.getHostName(); } /** * 执行参考 */ public void transfer(HttpServletRequest request) { SystemUtils systemUtils = new SystemUtils(); String ipaddr = systemUtils.getIpAddr(request); System.out.println(systemUtils.getIpAddr(request)); System.out.println(systemUtils.getRequestBrowserInfo(request)); System.out.println(systemUtils.getRequestSystemInfo(request)); System.out.println(systemUtils.getHostName(ipaddr)); } }
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8216 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
ykz200
我是壳叔,我正在想一个很棒的idea 北京

推荐标签 标签

  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    434 引用 • 1250 回帖 • 595 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 257 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 181 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 679 关注
  • Excel
    31 引用 • 28 回帖 • 1 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    35 引用 • 468 回帖 • 764 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖 • 1 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 9 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    37 引用 • 157 回帖
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    557 引用 • 675 回帖
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 669 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    54 引用 • 44 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    336 引用 • 324 回帖
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 385 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 16 关注
  • OneNote
    1 引用 • 3 回帖 • 1 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 635 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    118 引用 • 54 回帖 • 6 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 576 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖 • 1 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 277 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖 • 1 关注