程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 若依框架
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 若依框架
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 快速入门

  • 后端手册

  • 前端手册

  • 组件文档

  • 数据库分析

  • 集成插件

    • 集成 Docker 实现一键部署
    • 升级 Spring Boot 到 3.x 版本
    • 集成 Ehcache 实现本地缓存切换
    • 集成 WebSocket 实现实时通信
    • 集成 Electron 实现桌面应用程序
    • 集成 Atomikos 实现分布式事务
    • 集成 MinIO 实现分布式文件存储
    • 集成 Easy-ES 实现分布式全文检索
    • 使用 `localStorage` 代替 `cookie`
    • 使用 Undertow 替代 Tomcat 容器
    • 集成 Actuator 实现优雅关闭应用
    • 集成 AJ-Captcha 实现滑块验证码
    • 集成 Sharding-JDBC 实现分库分表
    • 集成 JustAuth 实现第三方授权登录
    • 集成 `watermark-dom` 实现页面水印
    • 集成 MyBatis-Plus 实现 MyBatis 增强
    • 集成 EasyExcel 实现 Excel 表格增强
    • 集成 Knife4j 实现 Swagger 文档增强
    • 集成 Redisson 实现 Redis 分布式锁
    • 集成 IP2Region 实现离线 IP 地址定位
    • 42集成 JSEncrypt 实现密码加密传输
    • 集成 HttpClient 实现 HTTP 接口增强
    • 集成 Druid 实现数据库密码加密功能
    • 集成 Browscap 实现用户代理解析
      • 1. 修改 Maven 配置文件 (pom.xml)
      • 2. 删除 bitwalker 依赖
      • 3. 在 ruoyi-common/pom.xml 中添加 browscap-java 依赖
      • 4. 新增用户代理解析类 UserAgent.java
      • 5. 修改 AsyncFactory 和 OnlineSessionFactory 的包路径及方法
      • 6. 测试用户代理解析功能
    • 集成 Dynamic-DataSource 实现多数据源增强
  • 若依框架
  • 集成插件
scholar
2024-08-31
目录

集成 Browscap 实现用户代理解析

# 集成 Browscap 实现用户代理解析

为了更好地解析用户代理(User-Agent)字符串,可以使用 browscap-java 替代已经停止维护的 UserAgentUtils。browscap-java 是一个功能强大的库,可以识别更多的新版本浏览器和操作系统。虽然首次加载可能比较慢,但后续使用性能较好。

# 1. 修改 Maven 配置文件 (pom.xml)

首先,需要在 pom.xml 中将 bitwalker 的依赖替换为 browscap-java。以下是需要修改的部分:

<properties>
    <browscap.version>1.3.12</browscap.version>
</properties>

<!-- 解析客户端操作系统、浏览器等 -->
<dependency>
    <groupId>com.blueconic</groupId>
    <artifactId>browscap-java</artifactId>
    <version>${browscap.version}</version>
</dependency>
1
2
3
4
5
6
7
8
9
10

# 2. 删除 bitwalker 依赖

在 ruoyi-framework/pom.xml 中删除 bitwalker 的依赖:

<!-- 删除bitwalker的依赖 -->
<dependency>
    <groupId>net.sf.uadetector</groupId>
    <artifactId>uadetector-resources</artifactId>
</dependency>
1
2
3
4
5

# 3. 在 ruoyi-common/pom.xml 中添加 browscap-java 依赖

在 ruoyi-common/pom.xml 中新增 browscap-java 的依赖,以支持用户代理解析功能:

<dependency>
    <groupId>com.blueconic</groupId>
    <artifactId>browscap-java</artifactId>
</dependency>
1
2
3
4

# 4. 新增用户代理解析类 UserAgent.java

为了实现用户代理解析,新增一个 UserAgent.java 类。这个类使用 browscap-java 来解析浏览器和操作系统的信息。以下是详细的代码示例:

package com.ruoyi.common.utils.http;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.blueconic.browscap.Capabilities;
import com.blueconic.browscap.UserAgentParser;
import com.blueconic.browscap.UserAgentService;

/**
 * 浏览器用户代理解析工具类
 * 
 * 该类使用 browscap-java 库来解析用户代理字符串,并提取出浏览器和操作系统的信息。
 * 
 * @author ruoyi
 */
public class UserAgent
{
    private static final Logger log = LoggerFactory.getLogger(UserAgent.class);

    /** 浏览器名称和版本 */
    private String browser = "";

    /** 操作系统名称 */
    private String operatingSystem = "";

    /** 用户代理解析器 */
    private static UserAgentParser parser = null;

    // 静态代码块用于初始化解析器
    static
    {
        try
        {
            // 初始化用户代理解析器
            parser = new UserAgentService().loadParser();
        }
        catch (Exception e)
        {
            log.error("初始化用户代理解析器时发生错误: {}", e.getMessage());
        }
    }

    /**
     * 构造函数,用于解析用户代理字符串
     * 
     * @param userAgentString 用户代理字符串
     */
    public UserAgent(String userAgentString)
    {
        if (parser != null)
        {
            String userAgentLowercaseString = userAgentString == null ? null : userAgentString.toLowerCase();
            Capabilities capabilities = parser.parse(userAgentLowercaseString);
            this.browser = String.format("%s %s", capabilities.getBrowser(), capabilities.getBrowserMajorVersion());
            this.operatingSystem = capabilities.getPlatform();
        }
    }

    /**
     * 静态方法,用于解析用户代理字符串
     * 
     * @param userAgentString 用户代理字符串
     * @return 解析后的 UserAgent 对象
     */
    public static UserAgent parseUserAgentString(String userAgentString)
    {
        return new UserAgent(userAgentString);
    }

    public String getBrowser()
    {
        return browser;
    }

    public String getOperatingSystem()
    {
        return operatingSystem;
    }
}
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

# 5. 修改 AsyncFactory 和 OnlineSessionFactory 的包路径及方法

将使用 UserAgent 类的路径替换为新创建的 UserAgent 类,并修改获取浏览器和操作系统信息的方法。

示例代码修改:

// bitwalker 获取浏览器/操作系统方法
String os = userAgent.getOperatingSystem().getName();
String browser = userAgent.getBrowser().getName();

// ======== 修改为 ========

// browscap-java 获取浏览器/操作系统方法
String os = userAgent.getOperatingSystem();
String browser = userAgent.getBrowser();
1
2
3
4
5
6
7
8
9

# 6. 测试用户代理解析功能

在集成完成后,您可以编写单元测试或在实际环境中运行应用程序,以验证 UserAgent 类的功能是否正常工作。测试时,可以使用各种常见的浏览器和操作系统的 User-Agent 字符串来确认解析结果是否准确。

总结

通过上述步骤,您可以成功集成 browscap-java 来替代旧的 UserAgentUtils,从而实现更强大的用户代理解析功能。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
集成 Druid 实现数据库密码加密功能
集成 Dynamic-DataSource 实现多数据源增强

← 集成 Druid 实现数据库密码加密功能 集成 Dynamic-DataSource 实现多数据源增强→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式