Java基礎(chǔ)教程之獲取操作系統(tǒng)及瀏覽器信息
在生產(chǎn)環(huán)境下,我們需要關(guān)閉swagger配置,避免暴露接口的這種危險(xiǎn)行為。
User Agent 的含義
User Agent 中文名為用戶代理,簡(jiǎn)稱 UA,它是一個(gè)特殊字符串頭,使得服務(wù)器能夠識(shí)別客戶使用的操作系統(tǒng)及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。
一些網(wǎng)站常常通過判斷 UA 來給不同的操作系統(tǒng)、不同的瀏覽器發(fā)送不同的頁面,因此可能造成某些頁面無法在某個(gè)瀏覽器中正常顯示,但通過偽裝 UA 可以繞過檢測(cè)。
瀏覽器的 UA 字串
標(biāo)準(zhǔn)格式為: 瀏覽器標(biāo)識(shí) (操作系統(tǒng)標(biāo)識(shí); 加密等級(jí)標(biāo)識(shí); 瀏覽器語言) 渲染引擎標(biāo)識(shí) 版本信息
瀏覽器標(biāo)識(shí)
由于很多網(wǎng)站在進(jìn)行 UA 檢測(cè)的時(shí)候忽略了兩位數(shù)版本號(hào),所以可能造成 瀏覽器及之后版本收到糟糕的頁面,因此自 瀏覽器 10 之后的版本中瀏覽器標(biāo)識(shí)項(xiàng)固定為 瀏覽器,在 UA 字串尾部添加真實(shí)版本信息。
注:源自百度百科
UserAgentUtils.jar
UserAgentUtils.jar 是 UserAgent 的工具類。
maven如下:
<!-- https://mvnrepository.com/artifact/eu.bitwalker/UserAgentUtils --> <dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUtils</artifactId> <version>1.20</version> </dependency>
java代碼如下:
UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent"));
Browser browser = userAgent.getBrowser();
OperatingSystem os = userAgent.getOperatingSystem();
方法
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);
/**
* 獲取操作系統(tǒng)及瀏覽器信息
* @param request
* @return
*/
@RequestMapping(value="/browser",method = RequestMethod.GET)
public void getBrowser(HttpServletRequest request){
String ua = request.getHeader("User-Agent");
log.info("******************************");
log.info("操作系統(tǒng)及瀏覽器信息:"+ua);
//轉(zhuǎn)成UserAgent對(duì)象
UserAgent userAgent = UserAgent.parseUserAgentString(ua);
//獲取瀏覽器信息
Browser browser = userAgent.getBrowser();
log.info("瀏覽器信息:"+browser);
//獲取系統(tǒng)信息
OperatingSystem os = userAgent.getOperatingSystem();
log.info("系統(tǒng)信息:"+os);
//系統(tǒng)名稱
String system = os.getName();
log.info("系統(tǒng)名稱:"+system);
//瀏覽器名稱
String browserName = browser.getName();
log.info("瀏覽器名稱:"+browserName);
log.info("******************************");
}
}
結(jié)果如下:
**************火狐****************
操作系統(tǒng)及瀏覽器信息:Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0
瀏覽器信息:FIREFOX
系統(tǒng)信息:WINDOWS_7
系統(tǒng)名稱:Windows 7
瀏覽器名稱:Firefox
********************************************谷歌****************
操作系統(tǒng)及瀏覽器信息:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36
瀏覽器信息:CHROME
系統(tǒng)信息:WINDOWS_7
系統(tǒng)名稱:Windows 7
瀏覽器名稱:Chrome
******************************************IE******************
操作系統(tǒng)及瀏覽器信息:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
瀏覽器信息:MOZILLA
系統(tǒng)信息:WINDOWS_7
系統(tǒng)名稱:Windows 7
瀏覽器名稱:Mozilla******************************
通過(User-Agent)獲取 瀏覽器類型,操作系統(tǒng)類型,手機(jī)機(jī)型
獲得瀏覽器請(qǐng)求頭中的 User-Agent
String ua = request.getHeader("User-Agent")
獲得瀏覽器類型,操作系統(tǒng)類型,請(qǐng)看上面的 java代碼 如下標(biāo)題內(nèi)容
獲得手機(jī)類型:
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);
/**
* 獲取操作系統(tǒng)及瀏覽器信息
* @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解析出機(jī)型:" + model);
}
}
}
再給出一個(gè):
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);
/**
* 獲取操作系統(tǒng)及瀏覽器信息
*
* @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產(chǎn)品系列:" + browser.getGroup() + "\n引擎:" + browser.getRenderingEngine());
// 瀏覽器版本
Version version = agent.getBrowserVersion();
System.out.println("========================");
System.out.println("主版本:" + version.getMajorVersion() + "\n小版本:" + version.getMinorVersion() + "\n完整版本:"
+ version.getVersion());
// 操作系統(tǒng)
System.out.println("========================");
OperatingSystem os = agent.getOperatingSystem();
System.out.println("名稱:" + os.getName() + "\n設(shè)備類型:" + os.getDeviceType() + "\n產(chǎn)品系列:" + os.getGroup() + "\n生成廠商:"
+ os.getManufacturer());
}
}
各位小伙伴自行測(cè)試結(jié)果吧?。?!
總結(jié)
到此這篇關(guān)于Java基礎(chǔ)教程之獲取操作系統(tǒng)及瀏覽器信息的文章就介紹到這了,更多相關(guān)Java獲取操作系統(tǒng)及瀏覽器信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解servlet的url-pattern匹配規(guī)則
本篇文章主要介紹了=servlet的url-pattern匹配規(guī)則,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12
詳解SpringBoot靜態(tài)方法獲取bean的三種方式
本文主要介紹了詳解SpringBoot靜態(tài)方法獲取bean的三種方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
Spring Boot 中的 Spring Cloud Feign的原
Spring Cloud Feign 是 Spring Cloud 中的一個(gè)組件,它可以幫助我們實(shí)現(xiàn)聲明式的 REST 客戶,這篇文章主要介紹了Spring Boot 中的 Spring Cloud Feign,需要的朋友可以參考下2023-07-07
SpringBoot啟動(dòng)流程入口參數(shù)創(chuàng)建對(duì)象源碼分析
這篇文章主要為大家介紹了SpringBoot啟動(dòng)流程入口參數(shù)研究及創(chuàng)建對(duì)象源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
mybatisPlus條件構(gòu)造器常用方法小結(jié)
這篇文章主要介紹了mybatisPlus條件構(gòu)造器常用方法,首先是.select和其他條件,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
Springboot項(xiàng)目中kaptcha驗(yàn)證碼的使用方式
這篇文章主要介紹了Springboot項(xiàng)目中kaptcha驗(yàn)證碼的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
mybatis-spring:@MapperScan注解的使用
這篇文章主要介紹了mybatis-spring:@MapperScan注解的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
關(guān)于Controller 層返回值的公共包裝類的問題
本文給大家介紹Controller 層返回值的公共包裝類-避免每次都包裝一次返回-InitializingBean增強(qiáng),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-09-09

