Java获取浏览器信息、IP地址、操作系统信息

     业务需求需要记录用户登录时的信息:浏览器信息、IP地址、操作系统信息等,从网上查找了很多帖子,实现方式有两种,一种纯编码判断,一种是使用UserAgentUtils工具类。

注:经测试第一种方式获取浏览器名称时获取不到IE的信息,第二种是可以的。

IE11请求的User-Agent为:

Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

Chrome请求的User-Agent为:

Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36

一、第一种方式

使用工具类获取信息,添加maven依赖:

<!-- https://mvnrepository.com/artifact/eu.bitwalker/UserAgentUtils -->
<dependency>
    <groupId>eu.bitwalker</groupId>
    <artifactId>UserAgentUtils</artifactId>
    <version>1.21</version>
</dependency>

1、获取浏览器名称及版本

public static String browserName(HttpServletRequest request){
        String userAgent = request.getHeader("User-Agent");
        UserAgent ua = UserAgent.parseUserAgentString(userAgent);
        Browser browser = ua.getBrowser();
        return browser.getName() + "-" + browser.getVersion(userAgent);
    }

 2、获取操作系统名称

 public static String osName(HttpServletRequest request){
        String userAgent = request.getHeader("User-Agent");
        UserAgent ua = UserAgent.parseUserAgentString(userAgent);
        OperatingSystem os = ua.getOperatingSystem();
        return os.getName();
    }

3、获取IP地址

public static String getIpAddress(HttpServletRequest request) {
        String ip = request.getHeader("X-Forwarded-For");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_CLUSTER_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_FORWARDED");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_VIA");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("REMOTE_ADDR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        if (ip.contains(",")) {
            return ip.split(",")[0];
        } else {
            return ip;
        }
    }

获得信息如下:

 

二、第二种方式

1、获取浏览器名称(获取不到IE的信息

public static String getBrowserName(HttpServletRequest request) {
        String browserName = "";
        String userAgent = request.getHeader("User-Agent").toUpperCase();
        if (userAgent == null || userAgent.equals("")) {
            return "";
        }
        if (userAgent.indexOf("MSIE") > 0) {
            browserName = "IE";
        } else if (userAgent.indexOf("FIREFOX") > 0) {
            browserName = "Firefox";
        } else if (userAgent.indexOf("CHROME") > 0) {
            browserName = "Chrome";
        } else if (userAgent.indexOf("SAFARI") > 0) {
            browserName = "Safari";
        } else if (userAgent.indexOf("CAMINO") > 0) {
            browserName = "Camino";
        } else if (userAgent.indexOf("KONQUEROR") > 0) {
            browserName = "Konqueror";
        } else if (userAgent.indexOf("EDGE") > 0) {
            browserName = "Microsoft Edge";
        }
        return browserName;
    }

  2、获取操作系统名称

public static String getOSname(HttpServletRequest request) {
        String osName = "";
        String userAgent = request.getHeader("User-Agent").toUpperCase();
        if (userAgent.contains("WINDOWS")) {
            if (userAgent.contains("WINDOWS NT 10.0")) {
                osName = "Windows 10";
            } else if (userAgent.contains("WINDOWS NT 6.2")) {
                osName = "Windows 8";
            } else if (userAgent.contains("WINDOWS NT 6.1")) {
                osName = "Windows 7";
            } else if (userAgent.contains("WINDOWS NT 6.0")) {
                osName = "Windows Vista";
            } else if (userAgent.contains("WINDOWS NT 5.2")) {
                osName = "Windows XP";
            } else if (userAgent.contains("WINDOWS NT 5.1")) {
                osName = "Windows XP";
            } else if (userAgent.contains("WINDOWS NT 5.01")) {
                osName = "Windows 2000";
            } else if (userAgent.contains("WINDOWS NT 5.0")) {
                osName = "Windows 2000";
            } else if (userAgent.contains("WINDOWS NT 4.0")) {
                osName = "Windows NT 4.0";
            } else if (userAgent.contains("WINDOWS 98; WIN 9X 4.90")) {
                osName = "Windows ME";
            } else if (userAgent.contains("WINDOWS 98")) {
                osName = "Windows 98";
            } else if (userAgent.contains("WINDOWS 95")) {
                osName = "Windows 95";
            } else if (userAgent.contains("WINDOWS CE")) {
                osName = "Windows CE";
            }
        } else if (userAgent.contains("MAC")){
            osName = "Mac";
        } else if (userAgent.contains("UNIX")){
            osName = "UNIX";
        } else if (userAgent.contains("LINUX")){
            osName = "Linux";
        } else if (userAgent.contains("SUNOS")){
            osName = "SunOS";
        }
        return osName;
    }

获取IP地址和第一种方式是一样的,获取后的效果是这样的:

第二种显然无法满足需求,推荐使用第一种工具类的方式获取。

 

欢迎关注

 

  • 7
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: 在Java中,可以使用HttpServletRequest类获取浏览器详细信息。可以使用以下方法: getHeader("User-Agent"): 获取浏览器的user-agent字符串。 getHeader("Accept"): 获取浏览器支持的内容类型。 getHeader("Accept-Language"): 获取浏览器支持的语言。 getHeader("Accept-Encoding"): 获取浏览器支持的编码方式。 getHeader("Connection"): 获取浏览器使用的连接类型。 getHeader("Host"): 获取浏览器请求的主机名。 getHeader("Referer"): 获取浏览器请求的来源页面。 你可以在servlet中使用这些方法来获取浏览器的详细信息。 ### 回答2: 在Java中,可以通过HttpServletRequest对象来获取浏览器的详细信息。 要获取浏览器详细信息,首先需要在Java Web应用程序中引入javax.servlet包。 接下来,可以在Servlet的doGet()或doPost()方法中使用HttpServletRequest对象来获取浏览器的详细信息。可以通过HttpServletRequest的getHeader()方法以及特定的HTTP头部参数来获取浏览器相关的信息。 例如,可以通过如下代码获取浏览器的User-Agent信息: ``` String userAgent = request.getHeader("User-Agent"); ``` User-Agent信息可以提供浏览器的名称、版本、操作系统等详细信息。 另外,也可以通过检查HTTP请求头中的Accept-Language参数来获取浏览器的语言设置。可以通过如下代码获取语言设置: ``` String language = request.getHeader("Accept-Language"); ``` 语言设置可以告诉你用户的首选语言,以便提供相应的本地化内容。 除了以上两个常见的头部参数外,还可以根据具体需求获取其他头部参数或请求连接的相关信息,比如获取请求的URL地址获取请求的方法、获取请求的IP地址等,都可以通过HttpServletRequest的相应方法来实现。 综上所述,通过HttpServletRequest对象可以方便地获取浏览器的详细信息,在Java中编写Web应用程序时非常有用。 ### 回答3: 要获取浏览器的详细信息,可以使用Java编程语言结合一些开源库。首先,我们需要获取客户端的HTTP请求头,然后从中提取所需的信息。 在Java中,可以使用Servlet的HttpServletRequest对象来获取HTTP请求头。通过调用`request.getHeader("User-Agent")`方法,我们可以获取浏览器的User-Agent信息,其中包含了浏览器的相关详细信息。 然后,我们可以使用一些开源库来解析User-Agent信息并提取所需的详细信息。比如,可以使用开源库"UserAgentUtils",它提供了一个简单的API用于解析User-Agent字符串。 首先,我们需要将User-Agent字符串传递给UserAgentUtils的`parseUserAgentString`方法,该方法将返回一个UserAgent对象。在UserAgent对象中,我们可以获取浏览器的名称、版本、操作系统等详细信息。 以下是一个简单的示例代码: ```java import nl.basjes.parse.useragent.UserAgent; import nl.basjes.parse.useragent.UserAgentAnalyzer; import javax.servlet.http.HttpServletRequest; public class BrowserInfo { public static String getBrowserInfo(HttpServletRequest request) { String userAgent = request.getHeader("User-Agent"); UserAgentAnalyzer userAgentAnalyzer = UserAgentAnalyzer .newBuilder() .withFields(UserAgent.OPERATING_SYSTEM_NAME, UserAgent.AGENT_NAME_VERSION_MAJOR) .build(); UserAgent parsedUserAgent = userAgentAnalyzer.parse(userAgent); String os = parsedUserAgent.getValue(UserAgent.OPERATING_SYSTEM_NAME); String browser = parsedUserAgent.getValue(UserAgent.AGENT_NAME_VERSION_MAJOR); return "操作系统: " + os + " ,浏览器: " + browser; } } ``` 使用上述代码,我们可以通过调用`getBrowserInfo(request)`来获取浏览器的详细信息,并将其作为字符串返回。 请注意,这只是一个简单的示例,不同的浏览器可能在User-Agent字符串中有不同的格式,所以在实际使用中可能需要进行更多的处理和适配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值