Java基础:获取操作系统及浏览器信息

小知识,大挑战!本文正在参与「程序员必备小知识」创作活动

本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。

📖摘要


1
复制代码心态好了,就没那么累了。心情好了,所见皆是明媚风景。

“一时解决不了的问题,那就利用这个契机,看清自己的局限性,对自己进行一场拨乱反正。”正如老话所说,一念放下,万般自在。如果你正被烦心事扰乱心神,不妨学会断舍离。断掉胡思乱想,社区垃圾情绪,离开负面能量。心态好了,就没那么累了。心情好了,所见皆是明媚风景。

在生产环境下,我们需要关闭swagger配置,避免暴露接口的这种危险行为。


User Agent 的含义

User Agent 中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。


浏览器的 UA 字串

标准格式为: 浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息

浏览器标识

由于很多网站在进行 UA 检测的时候忽略了两位数版本号,所以可能造成 浏览器及之后版本收到糟糕的页面,因此自 浏览器 10 之后的版本中浏览器标识项固定为 浏览器,在 UA 字串尾部添加真实版本信息。

注:源自百度百科


UserAgentUtils.jar

UserAgentUtils.jarUserAgent 的工具类。

maven如下:

1
2
3
4
5
6
java复制代码<!-- https://mvnrepository.com/artifact/eu.bitwalker/UserAgentUtils --> 
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.20</version>
</dependency>

java代码如下:

1
2
3
java复制代码UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent"));  
Browser browser = userAgent.getBrowser();
OperatingSystem os = userAgent.getOperatingSystem();

方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
java复制代码package com.cyj.controller;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import eu.bitwalker.useragentutils.Browser;
import eu.bitwalker.useragentutils.OperatingSystem;
import eu.bitwalker.useragentutils.UserAgent;

/**
*
* @Description: 获取ip控制器
* @ClassName: IpController.java
* @author ChenYongJia
* @Date 2019年4月20日 晚上20:25
* @Email chen87647213@163.com
*/
@RestController
public class IpController {

private static final Logger log = LoggerFactory.getLogger(IpController.class);

/**
* 获取操作系统及浏览器信息
* @param request
* @return
*/
@RequestMapping(value="/browser",method = RequestMethod.GET)
public void getBrowser(HttpServletRequest request){
String ua = request.getHeader("User-Agent");
log.info("******************************");
log.info("操作系统及浏览器信息:"+ua);
//转成UserAgent对象
UserAgent userAgent = UserAgent.parseUserAgentString(ua);
//获取浏览器信息
Browser browser = userAgent.getBrowser();
log.info("浏览器信息:"+browser);
//获取系统信息
OperatingSystem os = userAgent.getOperatingSystem();
log.info("系统信息:"+os);
//系统名称
String system = os.getName();
log.info("系统名称:"+system);
//浏览器名称
String browserName = browser.getName();
log.info("浏览器名称:"+browserName);
log.info("******************************");

}

}

结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
java复制代码**************火狐****************
操作系统及浏览器信息:Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0
浏览器信息:FIREFOX
系统信息:WINDOWS_7
系统名称:Windows 7
浏览器名称:Firefox
******************************

**************谷歌****************
操作系统及浏览器信息:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36
浏览器信息:CHROME
系统信息:WINDOWS_7
系统名称:Windows 7
浏览器名称:Chrome
******************************

************IE******************
操作系统及浏览器信息:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
浏览器信息:MOZILLA
系统信息:WINDOWS_7
系统名称:Windows 7
浏览器名称:Mozilla

******************************

通过(User-Agent)获取 浏览器类型,操作系统类型,手机机型

获得浏览器请求头中的 User-Agent

1
java复制代码String ua = request.getHeader("User-Agent")

获得浏览器类型,操作系统类型,请看上面的 java代码 如下标题内容

获得手机类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
java复制代码package com.cyj.controller;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import eu.bitwalker.useragentutils.Browser;
import eu.bitwalker.useragentutils.OperatingSystem;
import eu.bitwalker.useragentutils.UserAgent;

/**
*
* @Description: 获取ip控制器
* @ClassName: IpController.java
* @author ChenYongJia
* @Date 2019年4月20日 晚上20:25
* @Email chen87647213@163.com
*/
@RestController
public class IpController {

private static final Logger log = LoggerFactory.getLogger(IpController.class);

/**
* 获取操作系统及浏览器信息
* @param request
* @return
*/
@RequestMapping(value="/browser",method = RequestMethod.GET)
public void getBrowser(HttpServletRequest request){
UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent"));
Browser browser = userAgent.getBrowser();
OperatingSystem os = userAgent.getOperatingSystem();

Pattern pattern = Pattern.compile(";\\s?(\\S*?\\s?\\S*?)\\s?(Build)?/");
Matcher matcher = pattern.matcher((CharSequence) userAgent);
String model = null;
if (matcher.find()) {
model = matcher.group(1).trim();
log.debug("通过userAgent解析出机型:" + model);
}

}

}


再给出一个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
java复制代码 package com.cyj.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import eu.bitwalker.useragentutils.Browser;
import eu.bitwalker.useragentutils.OperatingSystem;
import eu.bitwalker.useragentutils.UserAgent;
import eu.bitwalker.useragentutils.Version;

/**
*
* @Description: 获取ip控制器
* @ClassName: IpController.java
* @author ChenYongJia
* @Date 2019年4月20日 晚上20:25
* @Email chen87647213@163.com
*/
@RestController
public class IpController {

private static final Logger log = LoggerFactory.getLogger(IpController.class);

/**
* 获取操作系统及浏览器信息
*
* @param request
* @return
*/
@RequestMapping(value = "/browser", method = RequestMethod.GET)
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String agentStr = request.getHeader("user-agent");
System.out.println(agentStr);
UserAgent agent = UserAgent.parseUserAgentString(agentStr);
// 浏览器
Browser browser = agent.getBrowser();
System.out.println("类型:" + browser.getBrowserType() + "\n名称:" + browser.getName() + "\n厂商:"
+ browser.getManufacturer() + "\n产品系列:" + browser.getGroup() + "\n引擎:" + browser.getRenderingEngine());

// 浏览器版本
Version version = agent.getBrowserVersion();
System.out.println("========================");
System.out.println("主版本:" + version.getMajorVersion() + "\n小版本:" + version.getMinorVersion() + "\n完整版本:"
+ version.getVersion());
// 操作系统
System.out.println("========================");
OperatingSystem os = agent.getOperatingSystem();
System.out.println("名称:" + os.getName() + "\n设备类型:" + os.getDeviceType() + "\n产品系列:" + os.getGroup() + "\n生成厂商:"
+ os.getManufacturer());
}

}

各位小伙伴自行测试结果吧!!!

最后感谢大家耐心观看完毕,原创不易,留个点赞收藏是您对我最大的鼓励!


🎉总结:

  • 更多参考精彩博文请看这里:《陈永佳的博客》
  • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%