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

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

本文由黑壳网原创

本文来源 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 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8208 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1056 回帖 • 1 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • 笔记

    好记性不如烂笔头。

    306 引用 • 782 回帖
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    51 引用 • 37 回帖 • 2 关注
  • 博客

    记录并分享人生的经历。

    272 引用 • 2386 回帖
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 531 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    141 引用 • 3721 回帖 • 1 关注
  • ReactiveX

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

    1 引用 • 2 回帖 • 141 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 233 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖 • 1 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 19 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 58 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 234 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 288 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 708 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 31 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    60 引用 • 287 回帖
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 53 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 16 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 43 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 11 关注
  • API

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

    76 引用 • 429 回帖
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    76 引用 • 390 回帖
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • Firefox

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

    7 引用 • 30 回帖 • 446 关注