109 lines
2.3 KiB
Java
109 lines
2.3 KiB
Java
package com.tiesheng.util.useragent;
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
/**
|
|
* User-Agent解析器
|
|
*
|
|
* @author looly
|
|
* @since 4.2.1
|
|
*/
|
|
public class UserAgentParser {
|
|
|
|
/**
|
|
* 解析User-Agent
|
|
*
|
|
* @param userAgentString User-Agent字符串
|
|
* @return {@link UserAgent}
|
|
*/
|
|
public static UserAgent parse(String userAgentString) {
|
|
if(StrUtil.isBlank(userAgentString)){
|
|
return null;
|
|
}
|
|
final UserAgent userAgent = new UserAgent();
|
|
|
|
// 浏览器
|
|
final Browser browser = parseBrowser(userAgentString);
|
|
userAgent.setBrowser(browser);
|
|
userAgent.setVersion(browser.getVersion(userAgentString));
|
|
|
|
// 浏览器引擎
|
|
final Engine engine = parseEngine(userAgentString);
|
|
userAgent.setEngine(engine);
|
|
userAgent.setEngineVersion(engine.getVersion(userAgentString));
|
|
|
|
// 操作系统
|
|
final OS os = parseOS(userAgentString);
|
|
userAgent.setOs(os);
|
|
userAgent.setOsVersion(os.getVersion(userAgentString));
|
|
|
|
// 平台
|
|
final Platform platform = parsePlatform(userAgentString);
|
|
userAgent.setPlatform(platform);
|
|
userAgent.setMobile(platform.isMobile() || browser.isMobile());
|
|
|
|
|
|
return userAgent;
|
|
}
|
|
|
|
/**
|
|
* 解析浏览器类型
|
|
*
|
|
* @param userAgentString User-Agent字符串
|
|
* @return 浏览器类型
|
|
*/
|
|
private static Browser parseBrowser(String userAgentString) {
|
|
for (Browser browser : Browser.browers) {
|
|
if (browser.isMatch(userAgentString)) {
|
|
return browser;
|
|
}
|
|
}
|
|
return Browser.Unknown;
|
|
}
|
|
|
|
/**
|
|
* 解析引擎类型
|
|
*
|
|
* @param userAgentString User-Agent字符串
|
|
* @return 引擎类型
|
|
*/
|
|
private static Engine parseEngine(String userAgentString) {
|
|
for (Engine engine : Engine.engines) {
|
|
if (engine.isMatch(userAgentString)) {
|
|
return engine;
|
|
}
|
|
}
|
|
return Engine.Unknown;
|
|
}
|
|
|
|
/**
|
|
* 解析系统类型
|
|
*
|
|
* @param userAgentString User-Agent字符串
|
|
* @return 系统类型
|
|
*/
|
|
private static OS parseOS(String userAgentString) {
|
|
for (OS os : OS.oses) {
|
|
if (os.isMatch(userAgentString)) {
|
|
return os;
|
|
}
|
|
}
|
|
return OS.Unknown;
|
|
}
|
|
|
|
/**
|
|
* 解析平台类型
|
|
*
|
|
* @param userAgentString User-Agent字符串
|
|
* @return 平台类型
|
|
*/
|
|
private static Platform parsePlatform(String userAgentString) {
|
|
for (Platform platform : Platform.platforms) {
|
|
if (platform.isMatch(userAgentString)) {
|
|
return platform;
|
|
}
|
|
}
|
|
return Platform.Unknown;
|
|
}
|
|
}
|