UserAgentUtils简介及使用

发布时间:2023-05-19

UserAgentUtils使用指南

UserAgentUtils是Java Web项目中一个非常常用的工具库,用于解析用户浏览器的User-Agent字符串,以获取所访问的设备类型、操作系统类型和版本、浏览器类型和版本等信息。

一、获取设备类型

UserAgentUtils可以解析出访问者使用的设备类型,如PC、手机、平板等。首先,我们需要获取HttpServletRequest对象,然后使用UserAgentUtils进行解析,示例如下:

/**
 * 获取设备类型
 * 
 * @param request
 * @return
 */
public static DeviceTypeEnum getDeviceType(HttpServletRequest request) {
    String userAgantStr = request.getHeader("User-Agent");
    UserAgent userAgent = UserAgent.parseUserAgentString(userAgantStr);
    if (userAgent.getOperatingSystem().getDeviceType() == DeviceType.MOBILE) {
        return DeviceTypeEnum.MOBILE;
    } else if (userAgent.getOperatingSystem().getDeviceType() == DeviceType.TABLET) {
        return DeviceTypeEnum.TABLET;
    } else {
        return DeviceTypeEnum.PC;
    }
}

二、获取操作系统类型和版本

UserAgentUtils还可以解析出所访问的设备的操作系统和版本信息。示例如下:

/**
 * 获取操作系统类型和版本
 * 
 * @param request
 * @return
 */
public static String getOsNameAndVersion(HttpServletRequest request) {
    String userAgantStr = request.getHeader("User-Agent");
    UserAgent userAgent = UserAgent.parseUserAgentString(userAgantStr);
    OperatingSystem os = userAgent.getOperatingSystem();
    String osName = os.getName();
    if (osName.contains("Windows")) {
        OperatingSystemVersion version = os.getVersion();
        osName = osName + " " + version;
    }
    return osName;
}

三、获取浏览器类型和版本

UserAgentUtils可以非常方便地解析出所访问的设备使用的浏览器类型和版本信息。示例如下:

/**
 * 获取浏览器类型和版本
 * 
 * @param request
 * @return
 */
public static String getBrowserNameAndVersion(HttpServletRequest request) {
    String userAgantStr = request.getHeader("User-Agent");
    UserAgent userAgent = UserAgent.parseUserAgentString(userAgantStr);
    Browser browser = userAgent.getBrowser();
    String browserName = browser.getName();
    if (browser.getBrowserType() == BrowserType.WEB_BROWSER) {
        Version version = userAgent.getBrowserVersion();
        browserName = browserName + " " + version;
    }
    return browserName;
}

四、获取其他信息

UserAgentUtils还可以获取本机的一些信息,如IP地址、MAC地址等。示例如下:

/**
 * 获取IP地址
 * 
 * @param request
 * @return
 */
public static String getIpAddr(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.getRemoteAddr();
    }
    return ip;
}
/**
 * 获取MAC地址
 * 
 * @param ip
 * @return
 */
public static String getMacAddr(String ip) {
    String mac = "";
    try {
        Process process = Runtime.getRuntime().exec("arp -a " + ip);
        InputStreamReader ir = new InputStreamReader(process.getInputStream());
        LineNumberReader input = new LineNumberReader(ir);
        process.waitFor();
        String line;
        while ((line = input.readLine()) != null) {
            line = line.trim();
            if (line.startsWith(ip)) {
                mac = line.substring(line.indexOf('-') - 2, line.indexOf('-') + 14);
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return mac;
}

五、小结

UserAgentUtils是解析用户浏览器信息的一个非常方便的工具类,可以获取到如设备类型、操作系统类型和版本、浏览器类型和版本、IP地址、MAC地址等信息。以上是部分使用示例,更多详细的使用方法可以查看官方文档。