refactor 重构 common, framework 包结构 (common-bom, common-core, common-datasource, common-dict, common-redis, common-satoken)

This commit is contained in:
zlyx 2022-12-25 07:56:33 +08:00
parent 15f7d4dc47
commit bde5d8b4c0
98 changed files with 518 additions and 294 deletions

View File

@ -71,6 +71,15 @@
<scope>import</scope> <scope>import</scope>
</dependency> </dependency>
<!-- common 的依赖配置-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-bom</artifactId>
<version>${ruoyi-vue-plus.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency> <dependency>
<groupId>org.springdoc</groupId> <groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-webmvc-core</artifactId> <artifactId>springdoc-openapi-webmvc-core</artifactId>

View File

@ -9,121 +9,35 @@
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<modules>
<module>ruoyi-common-bom</module>
<module>ruoyi-common-core</module>
<module>ruoyi-common-datasource</module>
<module>ruoyi-common-dict</module>
<module>ruoyi-common-satoken</module>
<module>ruoyi-common-redis</module>
</modules>
<artifactId>ruoyi-common</artifactId> <artifactId>ruoyi-common</artifactId>
<packaging>pom</packaging>
<description> <description>
common通用工具 common通用模块
</description> </description>
<dependencies> <dependencies>
<!-- Spring框架基本的核心工具 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- SpringWeb模块 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
</dependency>
<!-- Sa-Token 整合 jwt -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-jwt</artifactId>
</dependency>
<!-- 自定义验证注解 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!--常用工具类 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<!-- JSON工具类 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId> <artifactId>easyexcel</artifactId>
</dependency> </dependency>
<!-- yml解析器 -->
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</dependency>
<!-- servlet包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
</dependency>
<!-- dynamic-datasource 多数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-http</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-captcha</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-jwt</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-extra</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.sun.mail</groupId> <groupId>com.sun.mail</groupId>
<artifactId>jakarta.mail</artifactId> <artifactId>jakarta.mail</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.springdoc</groupId> <groupId>org.springdoc</groupId>
@ -135,23 +49,6 @@
<artifactId>springdoc-openapi-javadoc</artifactId> <artifactId>springdoc-openapi-javadoc</artifactId>
</dependency> </dependency>
<!-- 自动生成YML配置关联JSON文件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<!--redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>lock4j-redisson-spring-boot-starter</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-bom</artifactId>
<version>4.4.0</version>
<packaging>pom</packaging>
<description>
ruoyi-common-bom common依赖项
</description>
<dependencyManagement>
<dependencies>
<!-- 核心模块 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-core</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 数据库服务 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-datasource</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 字典 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-dict</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-satoken</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 缓存服务 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-redis</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>

View File

@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
<version>4.4.0</version>
</parent>
<artifactId>ruoyi-common-core</artifactId>
<description>
ruoyi-common-core核心模块
</description>
<dependencies>
<!-- Spring框架基本的核心工具 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- SpringWeb模块 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<!-- 自定义验证注解 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!--常用工具类 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<!-- JSON工具类 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- servlet包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-http</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-captcha</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-jwt</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-extra</artifactId>
</dependency>
<!-- 自动生成YML配置关联JSON文件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<!-- yml解析器 -->
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -1,9 +1,9 @@
package com.ruoyi.common.annotation; package com.ruoyi.common.core.annotation;
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.ruoyi.common.enums.SensitiveStrategy; import com.ruoyi.common.core.enums.SensitiveStrategy;
import com.ruoyi.common.jackson.SensitiveJsonSerializer; import com.ruoyi.common.core.jackson.SensitiveJsonSerializer;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package com.ruoyi.framework.config; package com.ruoyi.common.core.config;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.EnableAspectJAutoProxy;

View File

@ -1,7 +1,7 @@
package com.ruoyi.framework.config; package com.ruoyi.common.core.config;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.core.exception.ServiceException;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;

View File

@ -1,10 +1,10 @@
package com.ruoyi.framework.config; package com.ruoyi.common.core.config;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.ruoyi.framework.jackson.BigNumberSerializer; import com.ruoyi.common.core.jackson.BigNumberSerializer;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.config; package com.ruoyi.common.core.config;
import lombok.Data; import lombok.Data;
import lombok.Getter; import lombok.Getter;

View File

@ -1,4 +1,4 @@
package com.ruoyi.framework.config; package com.ruoyi.common.core.config;
import org.hibernate.validator.HibernateValidator; import org.hibernate.validator.HibernateValidator;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.constant; package com.ruoyi.common.core.constant;
/** /**
* 缓存的key 常量 * 缓存的key 常量

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.constant; package com.ruoyi.common.core.constant;
/** /**
* 缓存组名称常量 * 缓存组名称常量

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.constant; package com.ruoyi.common.core.constant;
/** /**
* 通用常量信息 * 通用常量信息

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.constant; package com.ruoyi.common.core.constant;
/** /**
* 代码生成通用常量 * 代码生成通用常量

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.constant; package com.ruoyi.common.core.constant;
/** /**
* 返回状态码 * 返回状态码

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.constant; package com.ruoyi.common.core.constant;
/** /**
* 用户常量信息 * 用户常量信息

View File

@ -1,6 +1,6 @@
package com.ruoyi.common.core.domain; package com.ruoyi.common.core.domain;
import com.ruoyi.common.constant.HttpStatus; import com.ruoyi.common.core.constant.HttpStatus;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.enums; package com.ruoyi.common.core.enums;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.enums; package com.ruoyi.common.core.enums;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.enums; package com.ruoyi.common.core.enums;
import cn.hutool.core.util.DesensitizedUtil; import cn.hutool.core.util.DesensitizedUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.enums; package com.ruoyi.common.core.enums;
/** /**
* 用户状态 * 用户状态

View File

@ -1,6 +1,6 @@
package com.ruoyi.common.enums; package com.ruoyi.common.core.enums;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.exception; package com.ruoyi.common.core.exception;
/** /**
* 演示模式异常 * 演示模式异常

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.exception; package com.ruoyi.common.core.exception;
/** /**
* 全局异常 * 全局异常

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.exception; package com.ruoyi.common.core.exception;
/** /**
* 业务异常 * 业务异常

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.exception; package com.ruoyi.common.core.exception;
/** /**
* 工具类异常 * 工具类异常

View File

@ -1,7 +1,7 @@
package com.ruoyi.common.exception.base; package com.ruoyi.common.core.exception.base;
import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.core.utils.MessageUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@ -1,6 +1,6 @@
package com.ruoyi.common.exception.file; package com.ruoyi.common.core.exception.file;
import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.core.exception.base.BaseException;
/** /**
* 文件信息异常类 * 文件信息异常类

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.exception.file; package com.ruoyi.common.core.exception.file;
/** /**
* 文件名称超长限制异常类 * 文件名称超长限制异常类

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.exception.file; package com.ruoyi.common.core.exception.file;
/** /**
* 文件名大小限制异常类 * 文件名大小限制异常类

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.exception.user; package com.ruoyi.common.core.exception.user;
/** /**
* 验证码错误异常类 * 验证码错误异常类

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.exception.user; package com.ruoyi.common.core.exception.user;
/** /**
* 验证码失效异常类 * 验证码失效异常类

View File

@ -1,6 +1,6 @@
package com.ruoyi.common.exception.user; package com.ruoyi.common.core.exception.user;
import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.core.exception.base.BaseException;
/** /**
* 用户信息异常类 * 用户信息异常类

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.exception.user; package com.ruoyi.common.core.exception.user;
/** /**
* 用户密码不正确或不符合规范异常类 * 用户密码不正确或不符合规范异常类

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.exception.user; package com.ruoyi.common.core.exception.user;
/** /**
* 用户错误最大次数异常类 * 用户错误最大次数异常类

View File

@ -1,4 +1,4 @@
package com.ruoyi.framework.jackson; package com.ruoyi.common.core.jackson;
import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.SerializerProvider;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.jackson; package com.ruoyi.common.core.jackson;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonGenerator;
@ -7,10 +7,10 @@ import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.ContextualSerializer; import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import com.ruoyi.common.annotation.Sensitive; import com.ruoyi.common.core.annotation.Sensitive;
import com.ruoyi.common.core.enums.SensitiveStrategy;
import com.ruoyi.common.core.service.SensitiveService; import com.ruoyi.common.core.service.SensitiveService;
import com.ruoyi.common.enums.SensitiveStrategy; import com.ruoyi.common.core.utils.SpringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.utils; package com.ruoyi.common.core.utils;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.SimpleCache; import cn.hutool.core.lang.SimpleCache;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.utils; package com.ruoyi.common.core.utils;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.utils; package com.ruoyi.common.core.utils;
import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
@ -7,7 +7,6 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.exc.MismatchedInputException; import com.fasterxml.jackson.databind.exc.MismatchedInputException;
import com.ruoyi.common.utils.spring.SpringUtils;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.utils; package com.ruoyi.common.core.utils;
import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.spring.SpringUtils;
import lombok.AccessLevel; import lombok.AccessLevel;

View File

@ -1,9 +1,9 @@
package com.ruoyi.common.utils; package com.ruoyi.common.core.utils;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.extra.servlet.ServletUtil; import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpStatus;
import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.constant.Constants;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.utils.spring; package com.ruoyi.common.core.utils;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import org.springframework.aop.framework.AopContext; import org.springframework.aop.framework.AopContext;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.utils; package com.ruoyi.common.core.utils;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.utils; package com.ruoyi.common.core.utils;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Validator; import cn.hutool.core.lang.Validator;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.utils; package com.ruoyi.common.core.utils;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@ -1,11 +1,11 @@
package com.ruoyi.common.utils; package com.ruoyi.common.core.utils;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig; import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.lang.tree.parser.NodeParser; import cn.hutool.core.lang.tree.parser.NodeParser;
import com.ruoyi.common.utils.reflect.ReflectUtils; import com.ruoyi.common.core.utils.reflect.ReflectUtils;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@ -1,6 +1,5 @@
package com.ruoyi.common.utils; package com.ruoyi.common.core.utils;
import com.ruoyi.common.utils.spring.SpringUtils;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.utils.file; package com.ruoyi.common.core.utils.file;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import lombok.AccessLevel; import lombok.AccessLevel;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.utils.file; package com.ruoyi.common.core.utils.file;
/** /**
* 媒体类型工具类 * 媒体类型工具类

View File

@ -1,13 +1,13 @@
package com.ruoyi.common.utils.ip; package com.ruoyi.common.core.utils.ip;
import cn.hutool.core.lang.Dict; import cn.hutool.core.lang.Dict;
import cn.hutool.core.net.NetUtil; import cn.hutool.core.net.NetUtil;
import cn.hutool.http.HtmlUtil; import cn.hutool.http.HtmlUtil;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.core.config.RuoYiConfig;
import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.core.utils.JsonUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@ -1,7 +1,7 @@
package com.ruoyi.common.utils.reflect; package com.ruoyi.common.core.utils.reflect;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@ -1,7 +1,7 @@
package com.ruoyi.common.utils.sql; package com.ruoyi.common.core.utils.sql;
import com.ruoyi.common.exception.UtilException; import com.ruoyi.common.core.exception.UtilException;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.core.controller; package com.ruoyi.common.core.web.controller;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.core.domain; package com.ruoyi.common.core.web.domain;
import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.core.domain; package com.ruoyi.common.core.web.domain;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data; import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.xss; package com.ruoyi.common.core.xss;
import javax.validation.Constraint; import javax.validation.Constraint;
import javax.validation.Payload; import javax.validation.Payload;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.xss; package com.ruoyi.common.core.xss;
import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.ReUtil;
import cn.hutool.http.HtmlUtil; import cn.hutool.http.HtmlUtil;

View File

@ -0,0 +1,5 @@
com.ruoyi.common.core.utils.SpringUtils
com.ruoyi.common.core.config.ApplicationConfig
com.ruoyi.common.core.config.JacksonConfig
com.ruoyi.common.core.config.ValidatorConfig
com.ruoyi.common.core.config.AsyncConfig

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
<version>4.4.0</version>
</parent>
<artifactId>ruoyi-common-datasource</artifactId>
<description>
ruoyi-common-datasource 数据源服务
</description>
<dependencies>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-core</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-satoken</artifactId>
</dependency>
<!-- dynamic-datasource 多数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
</dependency>
<!-- sql性能分析插件 -->
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.annotation; package com.ruoyi.common.datasource.annotation;
import java.lang.annotation.*; import java.lang.annotation.*;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.annotation; package com.ruoyi.common.datasource.annotation;
import java.lang.annotation.*; import java.lang.annotation.*;

View File

@ -1,4 +1,4 @@
package com.ruoyi.framework.config; package com.ruoyi.common.datasource.config;
import cn.hutool.core.net.NetUtil; import cn.hutool.core.net.NetUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
@ -7,8 +7,8 @@ import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.ruoyi.framework.handler.CreateAndUpdateMetaObjectHandler; import com.ruoyi.common.datasource.handler.CreateAndUpdateMetaObjectHandler;
import com.ruoyi.framework.interceptor.PlusDataPermissionInterceptor; import com.ruoyi.common.datasource.interceptor.PlusDataPermissionInterceptor;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.core.mapper; package com.ruoyi.common.datasource.core.mapper;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
@ -12,7 +12,7 @@ import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.baomidou.mybatisplus.core.toolkit.*; import com.baomidou.mybatisplus.core.toolkit.*;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.ruoyi.common.utils.BeanCopyUtils; import com.ruoyi.common.core.utils.BeanCopyUtils;
import org.apache.ibatis.binding.MapperMethod; import org.apache.ibatis.binding.MapperMethod;
import org.apache.ibatis.logging.Log; import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.LogFactory; import org.apache.ibatis.logging.LogFactory;

View File

@ -1,12 +1,12 @@
package com.ruoyi.common.core.domain; package com.ruoyi.common.datasource.core.page;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.utils.sql.SqlUtil; import com.ruoyi.common.core.utils.sql.SqlUtil;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.core.page; package com.ruoyi.common.datasource.core.page;
import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpStatus;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;

View File

@ -1,6 +1,6 @@
package com.ruoyi.common.enums; package com.ruoyi.common.datasource.enums;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;

View File

@ -1,6 +1,6 @@
package com.ruoyi.common.enums; package com.ruoyi.common.datasource.enums;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@ -10,7 +10,7 @@ import lombok.Getter;
* 语法支持 spel 模板表达式 * 语法支持 spel 模板表达式
* <p> * <p>
* 内置数据 user 当前用户 内容参考 LoginUser * 内置数据 user 当前用户 内容参考 LoginUser
* 如需扩展数据 可使用 {@link com.ruoyi.common.helper.DataPermissionHelper} 操作 * 如需扩展数据 可使用 {@link com.ruoyi.common.datasource.helper.DataPermissionHelper} 操作
* 内置服务 sdss 系统数据权限服务 内容参考 SysDataScopeService * 内置服务 sdss 系统数据权限服务 内容参考 SysDataScopeService
* 如需扩展更多自定义服务 可以参考 sdss 自行编写 * 如需扩展更多自定义服务 可以参考 sdss 自行编写
* *

View File

@ -1,13 +1,11 @@
package com.ruoyi.framework.handler; package com.ruoyi.common.datasource.handler;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpStatus;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.core.web.domain.BaseEntity;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject; import org.apache.ibatis.reflection.MetaObject;

View File

@ -1,4 +1,4 @@
package com.ruoyi.framework.handler; package com.ruoyi.common.datasource.handler;
import cn.hutool.core.annotation.AnnotationUtil; import cn.hutool.core.annotation.AnnotationUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;

View File

@ -1,10 +1,10 @@
package com.ruoyi.common.helper; package com.ruoyi.common.datasource.helper;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.ruoyi.common.enums.DataBaseType; import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.core.utils.SpringUtils;
import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.datasource.enums.DataBaseType;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@ -1,4 +1,4 @@
package com.ruoyi.common.helper; package com.ruoyi.common.datasource.helper;
import cn.dev33.satoken.context.SaHolder; import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.context.model.SaStorage; import cn.dev33.satoken.context.model.SaStorage;

View File

@ -0,0 +1,46 @@
package com.ruoyi.common.datasource.helper;
import com.ruoyi.common.core.domain.R;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.MyBatisSystemException;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletRequest;
/**
* Mybatis异常处理器
*
* @author Lion Li
*/
@Slf4j
@RestControllerAdvice
public class MybatisExceptionHandler {
/**
* 主键或UNIQUE索引数据重复异常
*/
@ExceptionHandler(DuplicateKeyException.class)
public R<Void> handleDuplicateKeyException(DuplicateKeyException e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',数据库中已存在记录'{}'", requestURI, e.getMessage());
return R.fail("数据库中已存在该记录,请联系管理员确认");
}
/**
* Mybatis系统异常 通用处理
*/
@ExceptionHandler(MyBatisSystemException.class)
public R<Void> handleCannotFindDataSourceException(MyBatisSystemException e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
String message = e.getMessage();
if (message.contains("CannotFindDataSourceException")) {
log.error("请求地址'{}', 未找到数据源", requestURI);
return R.fail("未找到数据源,请联系管理员确认");
}
log.error("请求地址'{}', Mybatis系统异常", requestURI, e);
return R.fail(message);
}
}

View File

@ -1,10 +1,10 @@
package com.ruoyi.framework.interceptor; package com.ruoyi.common.datasource.interceptor;
import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper; import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper;
import com.baomidou.mybatisplus.core.toolkit.PluginUtils; import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport; import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport;
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
import com.ruoyi.framework.handler.PlusDataPermissionHandler; import com.ruoyi.common.datasource.handler.PlusDataPermissionHandler;
import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.statement.delete.Delete; import net.sf.jsqlparser.statement.delete.Delete;
import net.sf.jsqlparser.statement.select.PlainSelect; import net.sf.jsqlparser.statement.select.PlainSelect;

View File

@ -0,0 +1 @@
com.ruoyi.common.datasource.config.MybatisPlusConfig

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
<version>4.4.0</version>
</parent>
<artifactId>ruoyi-common-dict</artifactId>
</project>

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
<version>4.4.0</version>
</parent>
<artifactId>ruoyi-common-redis</artifactId>
<description>
ruoyi-common-redis缓存服务
</description>
<dependencies>
<!-- RuoYi Common Core-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-core</artifactId>
</dependency>
<!--redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>lock4j-redisson-spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -1,10 +1,10 @@
package com.ruoyi.framework.config; package com.ruoyi.common.redis.config;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.framework.config.properties.RedissonProperties; import com.ruoyi.common.redis.config.properties.RedissonProperties;
import com.ruoyi.framework.handler.KeyPrefixHandler; import com.ruoyi.common.redis.handler.KeyPrefixHandler;
import com.ruoyi.framework.manager.PlusSpringCacheManager; import com.ruoyi.common.redis.manager.PlusSpringCacheManager;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.redisson.codec.JsonJacksonCodec; import org.redisson.codec.JsonJacksonCodec;
import org.redisson.spring.starter.RedissonAutoConfigurationCustomizer; import org.redisson.spring.starter.RedissonAutoConfigurationCustomizer;

View File

@ -1,4 +1,4 @@
package com.ruoyi.framework.config.properties; package com.ruoyi.common.redis.config.properties;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@ -1,6 +1,6 @@
package com.ruoyi.framework.handler; package com.ruoyi.common.redis.handler;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import org.redisson.api.NameMapper; import org.redisson.api.NameMapper;
/** /**

View File

@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.ruoyi.framework.manager; package com.ruoyi.common.redis.manager;
import com.ruoyi.common.utils.redis.RedisUtils; import com.ruoyi.common.redis.utils.RedisUtils;
import org.redisson.api.RMap; import org.redisson.api.RMap;
import org.redisson.api.RMapCache; import org.redisson.api.RMapCache;
import org.redisson.spring.cache.CacheConfig; import org.redisson.spring.cache.CacheConfig;

View File

@ -1,6 +1,6 @@
package com.ruoyi.common.utils.redis; package com.ruoyi.common.redis.utils;
import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.core.utils.SpringUtils;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.redisson.api.RMap; import org.redisson.api.RMap;

View File

@ -1,6 +1,6 @@
package com.ruoyi.common.utils.redis; package com.ruoyi.common.redis.utils;
import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.core.utils.SpringUtils;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.redisson.api.*; import org.redisson.api.*;

View File

@ -1,6 +1,6 @@
package com.ruoyi.common.utils.redis; package com.ruoyi.common.redis.utils;
import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.core.utils.SpringUtils;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.redisson.api.*; import org.redisson.api.*;

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
<version>4.4.0</version>
</parent>
<artifactId>ruoyi-common-satoken</artifactId>
<dependencies>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-core</artifactId>
</dependency>
<!-- RuoYi Common Redis-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-redis</artifactId>
</dependency>
<!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
</dependency>
<!-- Sa-Token 整合 jwt -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-jwt</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -1,11 +1,11 @@
package com.ruoyi.framework.config; package com.ruoyi.common.satoken.config;
import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.interceptor.SaInterceptor;
import cn.dev33.satoken.jwt.StpLogicJwtForSimple; import cn.dev33.satoken.jwt.StpLogicJwtForSimple;
import cn.dev33.satoken.router.SaRouter; import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.stp.StpLogic; import cn.dev33.satoken.stp.StpLogic;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import com.ruoyi.framework.config.properties.SecurityProperties; import com.ruoyi.common.satoken.config.properties.SecurityProperties;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;

View File

@ -1,4 +1,4 @@
package com.ruoyi.framework.config.properties; package com.ruoyi.common.satoken.config.properties;
import lombok.Data; import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;

View File

@ -1,8 +1,8 @@
package com.ruoyi.framework.satoken.dao; package com.ruoyi.common.satoken.core.dao;
import cn.dev33.satoken.dao.SaTokenDao; import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.util.SaFoxUtil; import cn.dev33.satoken.util.SaFoxUtil;
import com.ruoyi.common.utils.redis.RedisUtils; import com.ruoyi.common.redis.utils.RedisUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.time.Duration; import java.time.Duration;
@ -31,11 +31,11 @@ public class PlusSaTokenDao implements SaTokenDao {
*/ */
@Override @Override
public void set(String key, String value, long timeout) { public void set(String key, String value, long timeout) {
if (timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) { if (timeout == 0 || timeout <= NOT_VALUE_EXPIRE) {
return; return;
} }
// 判断是否为永不过期 // 判断是否为永不过期
if (timeout == SaTokenDao.NEVER_EXPIRE) { if (timeout == NEVER_EXPIRE) {
RedisUtils.setCacheObject(key, value); RedisUtils.setCacheObject(key, value);
} else { } else {
RedisUtils.setCacheObject(key, value, Duration.ofSeconds(timeout)); RedisUtils.setCacheObject(key, value, Duration.ofSeconds(timeout));
@ -49,7 +49,7 @@ public class PlusSaTokenDao implements SaTokenDao {
public void update(String key, String value) { public void update(String key, String value) {
long expire = getTimeout(key); long expire = getTimeout(key);
// -2 = 无此键 // -2 = 无此键
if (expire == SaTokenDao.NOT_VALUE_EXPIRE) { if (expire == NOT_VALUE_EXPIRE) {
return; return;
} }
this.set(key, value, expire); this.set(key, value, expire);
@ -78,9 +78,9 @@ public class PlusSaTokenDao implements SaTokenDao {
@Override @Override
public void updateTimeout(String key, long timeout) { public void updateTimeout(String key, long timeout) {
// 判断是否想要设置为永久 // 判断是否想要设置为永久
if (timeout == SaTokenDao.NEVER_EXPIRE) { if (timeout == NEVER_EXPIRE) {
long expire = getTimeout(key); long expire = getTimeout(key);
if (expire == SaTokenDao.NEVER_EXPIRE) { if (expire == NEVER_EXPIRE) {
// 如果其已经被设置为永久则不作任何处理 // 如果其已经被设置为永久则不作任何处理
} else { } else {
// 如果尚未被设置为永久那么再次set一次 // 如果尚未被设置为永久那么再次set一次
@ -105,11 +105,11 @@ public class PlusSaTokenDao implements SaTokenDao {
*/ */
@Override @Override
public void setObject(String key, Object object, long timeout) { public void setObject(String key, Object object, long timeout) {
if (timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) { if (timeout == 0 || timeout <= NOT_VALUE_EXPIRE) {
return; return;
} }
// 判断是否为永不过期 // 判断是否为永不过期
if (timeout == SaTokenDao.NEVER_EXPIRE) { if (timeout == NEVER_EXPIRE) {
RedisUtils.setCacheObject(key, object); RedisUtils.setCacheObject(key, object);
} else { } else {
RedisUtils.setCacheObject(key, object, Duration.ofSeconds(timeout)); RedisUtils.setCacheObject(key, object, Duration.ofSeconds(timeout));
@ -123,7 +123,7 @@ public class PlusSaTokenDao implements SaTokenDao {
public void updateObject(String key, Object object) { public void updateObject(String key, Object object) {
long expire = getObjectTimeout(key); long expire = getObjectTimeout(key);
// -2 = 无此键 // -2 = 无此键
if (expire == SaTokenDao.NOT_VALUE_EXPIRE) { if (expire == NOT_VALUE_EXPIRE) {
return; return;
} }
this.setObject(key, object, expire); this.setObject(key, object, expire);
@ -152,9 +152,9 @@ public class PlusSaTokenDao implements SaTokenDao {
@Override @Override
public void updateObjectTimeout(String key, long timeout) { public void updateObjectTimeout(String key, long timeout) {
// 判断是否想要设置为永久 // 判断是否想要设置为永久
if (timeout == SaTokenDao.NEVER_EXPIRE) { if (timeout == NEVER_EXPIRE) {
long expire = getObjectTimeout(key); long expire = getObjectTimeout(key);
if (expire == SaTokenDao.NEVER_EXPIRE) { if (expire == NEVER_EXPIRE) {
// 如果其已经被设置为永久则不作任何处理 // 如果其已经被设置为永久则不作任何处理
} else { } else {
// 如果尚未被设置为永久那么再次set一次 // 如果尚未被设置为永久那么再次set一次

View File

@ -1,9 +1,8 @@
package com.ruoyi.framework.satoken.service; package com.ruoyi.common.satoken.core.service;
import cn.dev33.satoken.stp.StpInterface; import cn.dev33.satoken.stp.StpInterface;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.enums.UserType;
import com.ruoyi.common.enums.UserType; import com.ruoyi.common.satoken.utils.LoginHelper;
import com.ruoyi.common.helper.LoginHelper;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList; import java.util.ArrayList;

View File

@ -1,4 +1,4 @@
package com.ruoyi.framework.web.exception; package com.ruoyi.common.satoken.handler;
import cn.dev33.satoken.exception.NotLoginException; import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.exception.NotPermissionException; import cn.dev33.satoken.exception.NotPermissionException;
@ -6,13 +6,11 @@ import cn.dev33.satoken.exception.NotRoleException;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpStatus;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.exception.DemoModeException; import com.ruoyi.common.core.exception.DemoModeException;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.utils.StreamUtils; import com.ruoyi.common.core.utils.StreamUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.MyBatisSystemException;
import org.springframework.context.support.DefaultMessageSourceResolvable; import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.validation.BindException; import org.springframework.validation.BindException;
import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MethodArgumentNotValidException;
@ -73,31 +71,6 @@ public class GlobalExceptionHandler {
return R.fail(e.getMessage()); return R.fail(e.getMessage());
} }
/**
* 主键或UNIQUE索引数据重复异常
*/
@ExceptionHandler(DuplicateKeyException.class)
public R<Void> handleDuplicateKeyException(DuplicateKeyException e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',数据库中已存在记录'{}'", requestURI, e.getMessage());
return R.fail("数据库中已存在该记录,请联系管理员确认");
}
/**
* Mybatis系统异常 通用处理
*/
@ExceptionHandler(MyBatisSystemException.class)
public R<Void> handleCannotFindDataSourceException(MyBatisSystemException e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
String message = e.getMessage();
if (message.contains("CannotFindDataSourceException")) {
log.error("请求地址'{}', 未找到数据源", requestURI);
return R.fail("未找到数据源,请联系管理员确认");
}
log.error("请求地址'{}', Mybatis系统异常", requestURI, e);
return R.fail(message);
}
/** /**
* 业务异常 * 业务异常
*/ */

View File

@ -1,15 +1,14 @@
package com.ruoyi.common.helper; package com.ruoyi.common.satoken.utils;
import cn.dev33.satoken.context.SaHolder; import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.enums.DeviceType;
import com.ruoyi.common.enums.DeviceType; import com.ruoyi.common.core.enums.UserType;
import com.ruoyi.common.enums.UserType; import com.ruoyi.common.core.exception.UtilException;
import com.ruoyi.common.exception.UtilException; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.utils.StringUtils;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

View File

@ -0,0 +1,3 @@
com.ruoyi.common.satoken.core.dao.PlusSaTokenDao
com.ruoyi.common.satoken.core.service.SaPermissionImpl
com.ruoyi.common.satoken.config.SaTokenConfig