update 使用hutool 重写 UserAgent

This commit is contained in:
疯狂的狮子li 2021-03-15 17:49:30 +08:00
parent 9b4b9e0c74
commit 7ae2df1390
3 changed files with 336 additions and 342 deletions

664
pom.xml
View File

@ -1,337 +1,329 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi</artifactId> <artifactId>ruoyi</artifactId>
<version>3.4.0</version> <version>3.4.0</version>
<name>ruoyi</name> <name>ruoyi</name>
<url>http://www.ruoyi.vip</url> <url>http://www.ruoyi.vip</url>
<description>若依管理系统</description> <description>若依管理系统</description>
<properties> <properties>
<ruoyi.version>3.4.0</ruoyi.version> <ruoyi.version>3.4.0</ruoyi.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version> <java.version>1.8</java.version>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
<druid.version>1.2.4</druid.version> <druid.version>1.2.4</druid.version>
<bitwalker.version>1.21</bitwalker.version> <swagger.version>2.9.2</swagger.version>
<swagger.version>2.9.2</swagger.version> <pagehelper.boot.version>1.3.0</pagehelper.boot.version>
<pagehelper.boot.version>1.3.0</pagehelper.boot.version> <fastjson.version>1.2.75</fastjson.version>
<fastjson.version>1.2.75</fastjson.version> <oshi.version>5.6.0</oshi.version>
<oshi.version>5.6.0</oshi.version> <jna.version>5.7.0</jna.version>
<jna.version>5.7.0</jna.version> <commons.io.version>2.5</commons.io.version>
<commons.io.version>2.5</commons.io.version> <commons.fileupload.version>1.3.3</commons.fileupload.version>
<commons.fileupload.version>1.3.3</commons.fileupload.version> <commons.collections.version>3.2.2</commons.collections.version>
<commons.collections.version>3.2.2</commons.collections.version> <poi.version>4.1.2</poi.version>
<poi.version>4.1.2</poi.version> <velocity.version>1.7</velocity.version>
<velocity.version>1.7</velocity.version> <jwt.version>0.9.1</jwt.version>
<jwt.version>0.9.1</jwt.version> <mybatis-plus.version>3.4.2</mybatis-plus.version>
<mybatis-plus.version>3.4.2</mybatis-plus.version> <hutool.version>5.5.8</hutool.version>
<hutool.version>5.5.8</hutool.version> <feign.version>2.2.6.RELEASE</feign.version>
<feign.version>2.2.6.RELEASE</feign.version> <feign-okhttp.version>11.0</feign-okhttp.version>
<feign-okhttp.version>11.0</feign-okhttp.version> </properties>
</properties>
<!-- 依赖声明 -->
<!-- 依赖声明 --> <dependencyManagement>
<dependencyManagement> <dependencies>
<dependencies>
<!-- SpringBoot的依赖配置-->
<!-- SpringBoot的依赖配置--> <dependency>
<dependency> <groupId>org.springframework.boot</groupId>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId>
<artifactId>spring-boot-dependencies</artifactId> <version>2.2.13.RELEASE</version>
<version>2.2.13.RELEASE</version> <type>pom</type>
<type>pom</type> <scope>import</scope>
<scope>import</scope> </dependency>
</dependency>
<!--阿里数据库连接池 -->
<!--阿里数据库连接池 --> <dependency>
<dependency> <groupId>com.alibaba</groupId>
<groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId>
<artifactId>druid-spring-boot-starter</artifactId> <version>${druid.version}</version>
<version>${druid.version}</version> </dependency>
</dependency>
<!-- pagehelper 分页插件 -->
<!-- 解析客户端操作系统、浏览器等 --> <dependency>
<dependency> <groupId>com.github.pagehelper</groupId>
<groupId>eu.bitwalker</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId>
<artifactId>UserAgentUtils</artifactId> <version>${pagehelper.boot.version}</version>
<version>${bitwalker.version}</version> <exclusions>
</dependency> <exclusion>
<groupId>org.mybatis</groupId>
<!-- pagehelper 分页插件 --> <artifactId>mybatis</artifactId>
<dependency> </exclusion>
<groupId>com.github.pagehelper</groupId> </exclusions>
<artifactId>pagehelper-spring-boot-starter</artifactId> </dependency>
<version>${pagehelper.boot.version}</version>
<exclusions> <!-- 获取系统信息 -->
<exclusion> <dependency>
<groupId>org.mybatis</groupId> <groupId>com.github.oshi</groupId>
<artifactId>mybatis</artifactId> <artifactId>oshi-core</artifactId>
</exclusion> <version>${oshi.version}</version>
</exclusions> </dependency>
</dependency>
<dependency>
<!-- 获取系统信息 --> <groupId>net.java.dev.jna</groupId>
<dependency> <artifactId>jna</artifactId>
<groupId>com.github.oshi</groupId> <version>${jna.version}</version>
<artifactId>oshi-core</artifactId> </dependency>
<version>${oshi.version}</version>
</dependency> <dependency>
<groupId>net.java.dev.jna</groupId>
<dependency> <artifactId>jna-platform</artifactId>
<groupId>net.java.dev.jna</groupId> <version>${jna.version}</version>
<artifactId>jna</artifactId> </dependency>
<version>${jna.version}</version>
</dependency> <!-- swagger2-->
<dependency>
<dependency> <groupId>io.springfox</groupId>
<groupId>net.java.dev.jna</groupId> <artifactId>springfox-swagger2</artifactId>
<artifactId>jna-platform</artifactId> <version>${swagger.version}</version>
<version>${jna.version}</version> <exclusions>
</dependency> <exclusion>
<groupId>io.swagger</groupId>
<!-- swagger2--> <artifactId>swagger-annotations</artifactId>
<dependency> </exclusion>
<groupId>io.springfox</groupId> <exclusion>
<artifactId>springfox-swagger2</artifactId> <groupId>io.swagger</groupId>
<version>${swagger.version}</version> <artifactId>swagger-models</artifactId>
<exclusions> </exclusion>
<exclusion> </exclusions>
<groupId>io.swagger</groupId> </dependency>
<artifactId>swagger-annotations</artifactId>
</exclusion> <!-- swagger2-UI-->
<exclusion> <dependency>
<groupId>io.swagger</groupId> <groupId>io.springfox</groupId>
<artifactId>swagger-models</artifactId> <artifactId>springfox-swagger-ui</artifactId>
</exclusion> <version>${swagger.version}</version>
</exclusions> </dependency>
</dependency>
<!--io常用工具类 -->
<!-- swagger2-UI--> <dependency>
<dependency> <groupId>commons-io</groupId>
<groupId>io.springfox</groupId> <artifactId>commons-io</artifactId>
<artifactId>springfox-swagger-ui</artifactId> <version>${commons.io.version}</version>
<version>${swagger.version}</version> </dependency>
</dependency>
<!--文件上传工具类 -->
<!--io常用工具类 --> <dependency>
<dependency> <groupId>commons-fileupload</groupId>
<groupId>commons-io</groupId> <artifactId>commons-fileupload</artifactId>
<artifactId>commons-io</artifactId> <version>${commons.fileupload.version}</version>
<version>${commons.io.version}</version> </dependency>
</dependency>
<!-- excel工具 -->
<!--文件上传工具类 --> <dependency>
<dependency> <groupId>org.apache.poi</groupId>
<groupId>commons-fileupload</groupId> <artifactId>poi-ooxml</artifactId>
<artifactId>commons-fileupload</artifactId> <version>${poi.version}</version>
<version>${commons.fileupload.version}</version> </dependency>
</dependency>
<!--velocity代码生成使用模板 -->
<!-- excel工具 --> <dependency>
<dependency> <groupId>org.apache.velocity</groupId>
<groupId>org.apache.poi</groupId> <artifactId>velocity</artifactId>
<artifactId>poi-ooxml</artifactId> <version>${velocity.version}</version>
<version>${poi.version}</version> <exclusions>
</dependency> <exclusion>
<groupId>commons-collections</groupId>
<!--velocity代码生成使用模板 --> <artifactId>commons-collections</artifactId>
<dependency> </exclusion>
<groupId>org.apache.velocity</groupId> </exclusions>
<artifactId>velocity</artifactId> </dependency>
<version>${velocity.version}</version>
<exclusions> <!-- collections工具类 -->
<exclusion> <dependency>
<groupId>commons-collections</groupId> <groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId> <artifactId>commons-collections</artifactId>
</exclusion> <version>${commons.collections.version}</version>
</exclusions> </dependency>
</dependency>
<!-- 阿里JSON解析器 -->
<!-- collections工具类 --> <dependency>
<dependency> <groupId>com.alibaba</groupId>
<groupId>commons-collections</groupId> <artifactId>fastjson</artifactId>
<artifactId>commons-collections</artifactId> <version>${fastjson.version}</version>
<version>${commons.collections.version}</version> </dependency>
</dependency>
<!--Token生成与解析-->
<!-- 阿里JSON解析器 --> <dependency>
<dependency> <groupId>io.jsonwebtoken</groupId>
<groupId>com.alibaba</groupId> <artifactId>jjwt</artifactId>
<artifactId>fastjson</artifactId> <version>${jwt.version}</version>
<version>${fastjson.version}</version> </dependency>
</dependency>
<dependency>
<!--Token生成与解析--> <groupId>com.baomidou</groupId>
<dependency> <artifactId>mybatis-plus-boot-starter</artifactId>
<groupId>io.jsonwebtoken</groupId> <version>${mybatis-plus.version}</version>
<artifactId>jjwt</artifactId> </dependency>
<version>${jwt.version}</version> <dependency>
</dependency> <groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<dependency> <version>${mybatis-plus.version}</version>
<groupId>com.baomidou</groupId> </dependency>
<artifactId>mybatis-plus-boot-starter</artifactId> <dependency>
<version>${mybatis-plus.version}</version> <groupId>cn.hutool</groupId>
</dependency> <artifactId>hutool-all</artifactId>
<dependency> <version>${hutool.version}</version>
<groupId>com.baomidou</groupId> </dependency>
<artifactId>mybatis-plus-extension</artifactId>
<version>${mybatis-plus.version}</version> <dependency>
</dependency> <groupId>org.springframework.cloud</groupId>
<dependency> <artifactId>spring-cloud-starter-openfeign</artifactId>
<groupId>cn.hutool</groupId> <version>${feign.version}</version>
<artifactId>hutool-all</artifactId> </dependency>
<version>${hutool.version}</version>
</dependency> <dependency>
<groupId>io.github.openfeign</groupId>
<dependency> <artifactId>feign-okhttp</artifactId>
<groupId>org.springframework.cloud</groupId> <version>${feign-okhttp.version}</version>
<artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
<version>${feign.version}</version>
</dependency> <!-- 定时任务-->
<dependency>
<dependency> <groupId>com.ruoyi</groupId>
<groupId>io.github.openfeign</groupId> <artifactId>ruoyi-quartz</artifactId>
<artifactId>feign-okhttp</artifactId> <version>${ruoyi.version}</version>
<version>${feign-okhttp.version}</version> </dependency>
</dependency>
<!-- 代码生成-->
<!-- 定时任务--> <dependency>
<dependency> <groupId>com.ruoyi</groupId>
<groupId>com.ruoyi</groupId> <artifactId>ruoyi-generator</artifactId>
<artifactId>ruoyi-quartz</artifactId> <version>${ruoyi.version}</version>
<version>${ruoyi.version}</version> </dependency>
</dependency>
<!-- 核心模块-->
<!-- 代码生成--> <dependency>
<dependency> <groupId>com.ruoyi</groupId>
<groupId>com.ruoyi</groupId> <artifactId>ruoyi-framework</artifactId>
<artifactId>ruoyi-generator</artifactId> <version>${ruoyi.version}</version>
<version>${ruoyi.version}</version> </dependency>
</dependency>
<!-- 系统模块-->
<!-- 核心模块--> <dependency>
<dependency> <groupId>com.ruoyi</groupId>
<groupId>com.ruoyi</groupId> <artifactId>ruoyi-system</artifactId>
<artifactId>ruoyi-framework</artifactId> <version>${ruoyi.version}</version>
<version>${ruoyi.version}</version> </dependency>
</dependency>
<!-- 通用工具-->
<!-- 系统模块--> <dependency>
<dependency> <groupId>com.ruoyi</groupId>
<groupId>com.ruoyi</groupId> <artifactId>ruoyi-common</artifactId>
<artifactId>ruoyi-system</artifactId> <version>${ruoyi.version}</version>
<version>${ruoyi.version}</version> </dependency>
</dependency>
<!-- demo模块 -->
<!-- 通用工具--> <dependency>
<dependency> <groupId>com.ruoyi</groupId>
<groupId>com.ruoyi</groupId> <artifactId>ruoyi-demo</artifactId>
<artifactId>ruoyi-common</artifactId> <version>${ruoyi.version}</version>
<version>${ruoyi.version}</version> </dependency>
</dependency>
</dependencies>
<!-- demo模块 --> </dependencyManagement>
<dependency>
<groupId>com.ruoyi</groupId> <modules>
<artifactId>ruoyi-demo</artifactId> <module>ruoyi-admin</module>
<version>${ruoyi.version}</version> <module>ruoyi-framework</module>
</dependency> <module>ruoyi-system</module>
<module>ruoyi-quartz</module>
</dependencies> <module>ruoyi-generator</module>
</dependencyManagement> <module>ruoyi-common</module>
<module>ruoyi-demo</module>
<modules> </modules>
<module>ruoyi-admin</module> <packaging>pom</packaging>
<module>ruoyi-framework</module>
<module>ruoyi-system</module>
<module>ruoyi-quartz</module> <dependencies>
<module>ruoyi-generator</module>
<module>ruoyi-common</module> </dependencies>
<module>ruoyi-demo</module>
</modules> <build>
<packaging>pom</packaging> <plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<dependencies> <artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
</dependencies> <configuration>
<source>${java.version}</source>
<build> <target>${java.version}</target>
<plugins> <encoding>${project.build.sourceEncoding}</encoding>
<plugin> </configuration>
<groupId>org.apache.maven.plugins</groupId> </plugin>
<artifactId>maven-compiler-plugin</artifactId> </plugins>
<version>3.1</version> <resources>
<configuration> <resource>
<source>${java.version}</source> <!--打包该目录下的 application.yml -->
<target>${java.version}</target> <directory>src/main/resources</directory>
<encoding>${project.build.sourceEncoding}</encoding> <!-- 启用过滤 即该资源中的变量将会被过滤器中的值替换 -->
</configuration> <filtering>true</filtering>
</plugin> </resource>
</plugins> </resources>
<resources> </build>
<resource>
<!--打包该目录下的 application.yml --> <repositories>
<directory>src/main/resources</directory> <repository>
<!-- 启用过滤 即该资源中的变量将会被过滤器中的值替换 --> <id>public</id>
<filtering>true</filtering> <name>aliyun nexus</name>
</resource> <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</resources> <releases>
</build> <enabled>true</enabled>
</releases>
<repositories> </repository>
<repository> </repositories>
<id>public</id>
<name>aliyun nexus</name> <pluginRepositories>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url> <pluginRepository>
<releases> <id>public</id>
<enabled>true</enabled> <name>aliyun nexus</name>
</releases> <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository> <releases>
</repositories> <enabled>true</enabled>
</releases>
<pluginRepositories> <snapshots>
<pluginRepository> <enabled>false</enabled>
<id>public</id> </snapshots>
<name>aliyun nexus</name> </pluginRepository>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url> </pluginRepositories>
<releases>
<enabled>true</enabled> <profiles>
</releases> <profile>
<snapshots> <id>dev</id>
<enabled>false</enabled> <properties>
</snapshots> <!-- 环境标识,需要与配置文件的名称相对应 -->
</pluginRepository> <profiles.active>dev</profiles.active>
</pluginRepositories> <logging.level>debug</logging.level>
</properties>
<profiles> <activation>
<profile> <!-- 默认环境 -->
<id>dev</id> <activeByDefault>true</activeByDefault>
<properties> </activation>
<!-- 环境标识,需要与配置文件的名称相对应 --> </profile>
<profiles.active>dev</profiles.active> <profile>
<logging.level>debug</logging.level> <id>prod</id>
</properties> <properties>
<activation> <profiles.active>prod</profiles.active>
<!-- 默认环境 --> <logging.level>warn</logging.level>
<activeByDefault>true</activeByDefault> </properties>
</activation> </profile>
</profile> </profiles>
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
<logging.level>warn</logging.level>
</properties>
</profile>
</profiles>
</project> </project>

View File

@ -1,5 +1,7 @@
package com.ruoyi.framework.manager.factory; package com.ruoyi.framework.manager.factory;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.ip.AddressUtils; import com.ruoyi.common.utils.ip.AddressUtils;
@ -9,7 +11,6 @@ import com.ruoyi.system.domain.SysLogininfor;
import com.ruoyi.system.domain.SysOperLog; import com.ruoyi.system.domain.SysOperLog;
import com.ruoyi.system.service.ISysLogininforService; import com.ruoyi.system.service.ISysLogininforService;
import com.ruoyi.system.service.ISysOperLogService; import com.ruoyi.system.service.ISysOperLogService;
import eu.bitwalker.useragentutils.UserAgent;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -36,7 +37,7 @@ public class AsyncFactory
public static TimerTask recordLogininfor(final String username, final String status, final String message, public static TimerTask recordLogininfor(final String username, final String status, final String message,
final Object... args) final Object... args)
{ {
final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); final UserAgent userAgent = UserAgentUtil.parse(ServletUtils.getRequest().getHeader("User-Agent"));
final String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); final String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
return new TimerTask() return new TimerTask()
{ {
@ -53,7 +54,7 @@ public class AsyncFactory
// 打印信息到日志 // 打印信息到日志
sys_user_logger.info(s.toString(), args); sys_user_logger.info(s.toString(), args);
// 获取客户端操作系统 // 获取客户端操作系统
String os = userAgent.getOperatingSystem().getName(); String os = userAgent.getOs().getName();
// 获取客户端浏览器 // 获取客户端浏览器
String browser = userAgent.getBrowser().getName(); String browser = userAgent.getBrowser().getName();
// 封装对象 // 封装对象

View File

@ -2,13 +2,14 @@ package com.ruoyi.framework.web.service;
import cn.hutool.core.lang.Validator; import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.ip.AddressUtils; import com.ruoyi.common.utils.ip.AddressUtils;
import com.ruoyi.common.utils.ip.IpUtils; import com.ruoyi.common.utils.ip.IpUtils;
import eu.bitwalker.useragentutils.UserAgent;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.SignatureAlgorithm;
@ -149,12 +150,12 @@ public class TokenService
*/ */
public void setUserAgent(LoginUser loginUser) public void setUserAgent(LoginUser loginUser)
{ {
UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); UserAgent userAgent = UserAgentUtil.parse(ServletUtils.getRequest().getHeader("User-Agent"));
String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
loginUser.setIpaddr(ip); loginUser.setIpaddr(ip);
loginUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip)); loginUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip));
loginUser.setBrowser(userAgent.getBrowser().getName()); loginUser.setBrowser(userAgent.getBrowser().getName());
loginUser.setOs(userAgent.getOperatingSystem().getName()); loginUser.setOs(userAgent.getOs().getName());
} }
/** /**