在管理系统中,为了提高安全性,有些数据是需要经过加密处理再存入数据库,因此需要规定加密算法、加密字段等配置,而RuoYi中没有相关配置,本文参考RuoYi的多租户系统版本来增加相关功能。
多租户后台管理系统 RuoYi-Vue-Plus
多租户后台管理系统RuoYi-Vue-Plus完全重写了RuoYi-Vue,在后端项目结构上采用插件化 + 扩展包形式,结构解耦,不同的插件实现不同的通用功能,如数据加解密、excel功能、定时任务、邮件功能、文件服务、短信服务、租户功能等。
-
首先,来看一下系统的整体结构。
ruoyi-admin:web服务入口模块ruoyi-common:通用功能插件模块ruoyi-extend:扩展服务模块ruoyi-modules:业务服务模块
在
ruoyi-common中,又包含多个功能插件,如下图所示,本文要使用的是ruoyi-common-encrypt插件来实现加解密功能。

-
加解密插件的功能与项目结构
ruoyi-common-encrypt插件的功能只要有两个:一个是在数据库操作时,对数据字段进行加解密;一个是在与前端交互时,对接口携带的body数据进行加解密。annotation:注解,包括接口注解和字段注解。通过添加注解来标注想要加解密的接口或字段;config:配置,包括 api 接口配置和基于mybatis 的数据字段加解密配置;core:所有的加密器和加密管理类;enumd:枚举类filter:servlet 过滤器,用于对添加注解的接口数据进行加解密;interceptor:mybatis 拦截器,用于对添加注解的字段进行加解密;properties:配置属性;utils:具体的加解密方法。
-
相关配置
ruoyi-admin/src/main/resources/application.yml# 数据加密 mybatis-encryptor: # 是否开启加密 enable: false # 默认加密算法 algorithm: BASE64 # 编码方式 BASE64/HEX。默认BASE64 encode: BASE64 # 安全秘钥 对称算法的秘钥 如:AES,SM4 password: # 公私钥 非对称算法的公私钥 如:SM2,RSA publicKey: privateKey:
添加加解密功能插件
基本上就是将插件项目文件复制到RuoYi-Vue中,然后在application.yml添加配置即可,但是涉及到第三方库的版本问题,需要做部分改动。
- 首先,将代码整体添加到项目中。

- 在
ruoyi-framework/pom.xml中添加如下依赖
<!-- 加解密模块配置 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-crypto</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<optional>true</optional>
</dependency>
<!-- servlet包 -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
</dependency>
并在总pom文件中管理以下依赖
<!--版本号-->
<hutool.version>5.8.38</hutool.version>
<mybatisplus.veriosn>3.5.2</mybatisplus.veriosn>
<bouncycastle.version>1.68</bouncycastle.version>
<!-- mybatis plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.veriosn}</version>
</dependency>
<!--hutool工具-->
<!-- hutool 的依赖配置-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-bom</artifactId>
<version>${hutool.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>${bouncycastle.version}</version>
</dependency>
- 移除drama和jakarta的相关依赖,导入ruoyi和javax的依赖
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.encrypt.annotation.EncryptField;
import org.dromara.common.encrypt.core.EncryptContext;
import org.dromara.common.encrypt.core.EncryptorManager;
import org.dromara.common.encrypt.enumd.AlgorithmType;
import org.dromara.common.encrypt.enumd.EncodeType;
import org.dromara.common.encrypt.properties.EncryptorProperties;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.WriteListener;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpServletResponseWrapper;
- 将config中的@AutoConfiguration修改(springboot2不采用该注解)
@Configuration
@AutoConfigureAfter(MybatisAutoConfiguration.class)
@EnableConfigurationProperties(EncryptorProperties.class)
@ConditionalOnProperty(value = "mybatis-encryptor.enable", havingValue = "true")
@Slf4j
public class EncryptorAutoConfiguration
{ ... ... }
- 修改java8不支持的语法
if (handler instanceof HandlerMethod handlerMethod) {
return handlerMethod.getMethodAnnotation(ApiEncrypt.class);
}
// 修改为
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
return handlerMethod.getMethodAnnotation(ApiEncrypt.class);
}
- 其他修改
- 从
RuoYi-Vue-Plus获取ObjectUtils方法添加到common模块 SpringUtils.getBean方法只传字符串
-
在
application.yml中添加配置 -
在一个数据字段上添加注解,测试功能
582

被折叠的 条评论
为什么被折叠?



