【Java 学习】服务端获取客户端浏览器、操作系统、设备类型等信息 您所在的位置:网站首页 电脑的操作系统版本 【Java 学习】服务端获取客户端浏览器、操作系统、设备类型等信息

【Java 学习】服务端获取客户端浏览器、操作系统、设备类型等信息

2024-07-17 14:01| 来源: 网络整理| 查看: 265

文章目录 1、服务端获取客户端信息(1)常见问题(2)相关依赖(3)编写工具类(4)核心控制层 微信公众号

1、服务端获取客户端信息 (1)常见问题

我在工作中遇到一个问题,需要在服务端判断用户的操作系统类型,然后选择系统的版本是Windows版还是Linux版。核心问题是怎么判断客户端的操作类型

(2)相关依赖

在Maven的官网找到我们所需要的依赖,引入项目中

eu.bitwalker UserAgentUtils 1.21 (3)编写工具类 import eu.bitwalker.useragentutils.Browser; import eu.bitwalker.useragentutils.OperatingSystem; import eu.bitwalker.useragentutils.UserAgent; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; /* * 工具类参照文章:https://blog.csdn.net/qq_23832313/article/details/82775316 * * @author Tellsea * @date 2020/10/27 */ public class UserAgentUtils { private static Logger logger = LoggerFactory.getLogger(UserAgentUtils.class); /** * 根据http获取userAgent信息 * * @param request * @return */ public static String getUserAgent(HttpServletRequest request) { String userAgent = request.getHeader("User-Agent"); return userAgent; } /** * 根据request获取userAgent,然后解析出osVersion * * @param request * @return */ public static String getOsVersion(HttpServletRequest request) { String userAgent = getUserAgent(request); return getOsVersion(userAgent); } /** * 根据userAgent解析出osVersion * * @param userAgent * @return */ public static String getOsVersion(String userAgent) { String osVersion = ""; if (StringUtils.isBlank(userAgent)) { return osVersion; } String[] strArr = userAgent.substring(userAgent.indexOf("(") + 1, userAgent.indexOf(")")).split(";"); if (null == strArr || strArr.length == 0) { return osVersion; } osVersion = strArr[1]; logger.info("osVersion is:{}", osVersion); return osVersion; } /** * 获取操作系统对象 * * @param userAgent * @return */ private static OperatingSystem getOperatingSystem(String userAgent) { UserAgent agent = UserAgent.parseUserAgentString(userAgent); OperatingSystem operatingSystem = agent.getOperatingSystem(); return operatingSystem; } /** * 获取os:Windows/ios/Android * * @param request * @return */ public static String getOs(HttpServletRequest request) { String userAgent = getUserAgent(request); return getOs(userAgent); } /** * 获取os:Windows/ios/Android * * @param userAgent * @return */ public static String getOs(String userAgent) { OperatingSystem operatingSystem = getOperatingSystem(userAgent); String os = operatingSystem.getGroup().getName(); logger.info("os is:{}", os); return os; } /** * 获取deviceType * * @param request * @return */ public static String getDeviceType(HttpServletRequest request) { String userAgent = getUserAgent(request); return getDeviceType(userAgent); } /** * 获取deviceType * * @param userAgent * @return */ public static String getDeviceType(String userAgent) { OperatingSystem operatingSystem = getOperatingSystem(userAgent); String deviceType = operatingSystem.getDeviceType().toString(); logger.info("deviceType is:{}", deviceType); return deviceType; } /** * 获取操作系统的名字 * * @param request * @return */ public static String getOsName(HttpServletRequest request) { String userAgent = getUserAgent(request); return getOsName(userAgent); } /** * 获取操作系统的名字 * * @param userAgent * @return */ public static String getOsName(String userAgent) { OperatingSystem operatingSystem = getOperatingSystem(userAgent); String osName = operatingSystem.getName(); logger.info("osName is:{}", osName); return osName; } /** * 获取device的生产厂家 * * @param request */ public static String getDeviceManufacturer(HttpServletRequest request) { String userAgent = getUserAgent(request); return getDeviceManufacturer(userAgent); } /** * 获取device的生产厂家 * * @param userAgent */ public static String getDeviceManufacturer(String userAgent) { OperatingSystem operatingSystem = getOperatingSystem(userAgent); String deviceManufacturer = operatingSystem.getManufacturer().toString(); logger.info("deviceManufacturer is:{}", deviceManufacturer); return deviceManufacturer; } /** * 获取浏览器对象 * * @param userAgent * @return */ public static Browser getBrowser(String agent) { UserAgent userAgent = UserAgent.parseUserAgentString(agent); Browser browser = userAgent.getBrowser(); return browser; } /** * 获取browser name * * @param request * @return */ public static String getBorderName(HttpServletRequest request) { String userAgent = getUserAgent(request); return getBorderName(userAgent); } /** * 获取browser name * * @param userAgent * @return */ public static String getBorderName(String userAgent) { Browser browser = getBrowser(userAgent); String borderName = browser.getName(); logger.info("borderName is:{}", borderName); return borderName; } /** * 获取浏览器的类型 * * @param request * @return */ public static String getBorderType(HttpServletRequest request) { String userAgent = getUserAgent(request); return getBorderType(userAgent); } /** * 获取浏览器的类型 * * @param userAgent * @return */ public static String getBorderType(String userAgent) { Browser browser = getBrowser(userAgent); String borderType = browser.getBrowserType().getName(); logger.info("borderType is:{}", borderType); return borderType; } /** * 获取浏览器组: CHROME、IE * * @param request * @return */ public static String getBorderGroup(HttpServletRequest request) { String userAgent = getUserAgent(request); return getBorderGroup(userAgent); } /** * 获取浏览器组: CHROME、IE * * @param userAgent * @return */ public static String getBorderGroup(String userAgent) { Browser browser = getBrowser(userAgent); String browerGroup = browser.getGroup().getName(); logger.info("browerGroup is:{}", browerGroup); return browerGroup; } /** * 获取浏览器的生产厂商 * * @param request * @return */ public static String getBrowserManufacturer(HttpServletRequest request) { String userAgent = getUserAgent(request); return getBrowserManufacturer(userAgent); } /** * 获取浏览器的生产厂商 * * @param userAgent * @return */ public static String getBrowserManufacturer(String userAgent) { Browser browser = getBrowser(userAgent); String browserManufacturer = browser.getManufacturer().getName(); logger.info("browserManufacturer is:{}", browserManufacturer); return browserManufacturer; } /** * 获取浏览器使用的渲染引擎 * * @param request * @return */ public static String getBorderRenderingEngine(HttpServletRequest request) { String userAgent = getUserAgent(request); return getBorderRenderingEngine(userAgent); } /** * 获取浏览器使用的渲染引擎 * * @param userAgent * @return */ public static String getBorderRenderingEngine(String userAgent) { Browser browser = getBrowser(userAgent); String renderingEngine = browser.getRenderingEngine().name(); logger.info("renderingEngine is:{}", renderingEngine); return renderingEngine; } /** * 获取浏览器版本 * * @param request * @return */ public static String getBrowserVersion(HttpServletRequest request) { String userAgent = getUserAgent(request); return getBrowserVersion(userAgent); } /** * 获取浏览器版本 * * @param userAgent * @return */ public static String getBrowserVersion(String userAgent) { Browser browser = getBrowser(userAgent); String borderVersion = browser.getVersion(userAgent).toString(); return borderVersion; } public static void main(String[] args) { // String androidUserAgent = "Mozilla/5.0 (Linux; Android 8.0; LON-AL00 Build/HUAWEILON-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044204 Mobile Safari/537.36 V1_AND_SQ_7.7.8_908_YYB_D QQ/7.7.8.3705 NetType/WIFI WebP/0.3.0 Pixel/1440"; // String iosUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16A366 QQ/7.7.8.421 V1_IPH_SQ_7.7.8_1_APP_A Pixel/750 Core/UIWebView Device/Apple(iPhone 6s) NetType/WIFI QBWebViewType/1"; String winUserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"; System.out.println("浏览器组:" + getBorderGroup(winUserAgent)); System.out.println("浏览器名字:" + getBorderName(winUserAgent)); System.out.println("浏览器类型" + getBorderType(winUserAgent)); System.out.println("浏览器生产商:" + getBrowserManufacturer(winUserAgent)); System.out.println("浏览器版本:" + getBrowserVersion(winUserAgent)); System.out.println("设备生产厂商:" + getDeviceManufacturer(winUserAgent)); System.out.println("设备类型:" + getDeviceType(winUserAgent)); System.out.println("设备操作系统:" + getOs(winUserAgent)); System.out.println("操作系统的名字:" + getOsName(winUserAgent)); System.out.println("操作系统的版本号:" + getOsVersion(winUserAgent)); System.out.println("操作系统浏览器的渲染引擎:" + getBorderRenderingEngine(winUserAgent)); if (getOs(winUserAgent).contains("Windows")) { System.out.println("是Windows"); } if (getOs(winUserAgent).contains("Linux")) { System.out.println("是Linux"); } else { System.out.println(getOs(winUserAgent)); System.out.println("无法匹配"); } } } (4)核心控制层

我这里为了方便,创建的是 spring boot 项目,然后用内网穿透提供的访问,这样方便测试,使用Windows 和 Linux 判断

package cn.tellsea.systemtype.controller; import cn.tellsea.systemtype.utils.UserAgentUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; /** * @author Tellsea * @date 2020/10/27 */ @Controller public class TestController { @GetMapping("test") @ResponseBody public String test(HttpServletRequest request) { String userAgent = request.getHeader("user-agent"); System.out.println("agent: " + userAgent); System.out.println("浏览器组:" + UserAgentUtils.getBorderGroup(userAgent)); System.out.println("浏览器名字:" + UserAgentUtils.getBorderName(userAgent)); System.out.println("浏览器类型" + UserAgentUtils.getBorderType(userAgent)); System.out.println("浏览器生产商:" + UserAgentUtils.getBrowserManufacturer(userAgent)); System.out.println("浏览器版本:" + UserAgentUtils.getBrowserVersion(userAgent)); System.out.println("设备生产厂商:" + UserAgentUtils.getDeviceManufacturer(userAgent)); System.out.println("设备类型:" + UserAgentUtils.getDeviceType(userAgent)); System.out.println("设备操作系统:" + UserAgentUtils.getOs(userAgent)); System.out.println("操作系统的名字:" + UserAgentUtils.getOsName(userAgent)); System.out.println("操作系统的版本号:" + UserAgentUtils.getOsVersion(userAgent)); System.out.println("操作系统浏览器的渲染引擎:" + UserAgentUtils.getBorderRenderingEngine(userAgent)); String os = UserAgentUtils.getOs(userAgent); if (os.contains("Windows")) { System.out.println("是Windows"); } else if (os.contains("Linux")) { System.out.println("是Linux"); } else { System.out.println("无法匹配: {" + os + "}"); } return "测试成功"; } }

如果是java 写的main方法,直接用浏览器查看请求信息时的userAgent测试即可

在这里插入图片描述

微信公众号



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有