四、RuoYi项目集成数据加密功能

在管理系统中,为了提高安全性,有些数据是需要经过加密处理再存入数据库,因此需要规定加密算法、加密字段等配置,而RuoYi中没有相关配置,本文参考RuoYi的多租户系统版本来增加相关功能。

多租户后台管理系统 RuoYi-Vue-Plus

多租户后台管理系统RuoYi-Vue-Plus完全重写了RuoYi-Vue,在后端项目结构上采用插件化 + 扩展包形式,结构解耦,不同的插件实现不同的通用功能,如数据加解密、excel功能、定时任务、邮件功能、文件服务、短信服务、租户功能等。

  1. 首先,来看一下系统的整体结构。

    • ruoyi-admin:web服务入口模块
    • ruoyi-common:通用功能插件模块
    • ruoyi-extend:扩展服务模块
    • ruoyi-modules:业务服务模块

    ruoyi-common中,又包含多个功能插件,如下图所示,本文要使用的是ruoyi-common-encrypt插件来实现加解密功能。
    在这里插入图片描述

  2. 加解密插件的功能与项目结构

    ruoyi-common-encrypt插件的功能只要有两个:一个是在数据库操作时,对数据字段进行加解密;一个是在与前端交互时,对接口携带的body数据进行加解密。

    • annotation:注解,包括接口注解和字段注解。通过添加注解来标注想要加解密的接口或字段;
    • config:配置,包括 api 接口配置和基于mybatis 的数据字段加解密配置;
    • core:所有的加密器和加密管理类;
    • enumd:枚举类
    • filter:servlet 过滤器,用于对添加注解的接口数据进行加解密;
    • interceptor:mybatis 拦截器,用于对添加注解的字段进行加解密;
    • properties:配置属性;
    • utils:具体的加解密方法。
  3. 相关配置

    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添加配置即可,但是涉及到第三方库的版本问题,需要做部分改动。

  1. 首先,将代码整体添加到项目中。
    在这里插入图片描述
  2. 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>
  1. 移除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;
  1. 将config中的@AutoConfiguration修改(springboot2不采用该注解)
@Configuration
@AutoConfigureAfter(MybatisAutoConfiguration.class)
@EnableConfigurationProperties(EncryptorProperties.class)
@ConditionalOnProperty(value = "mybatis-encryptor.enable", havingValue = "true")
@Slf4j
public class EncryptorAutoConfiguration 
{ ... ... }
  1. 修改java8不支持的语法
if (handler instanceof HandlerMethod handlerMethod) {
  	return handlerMethod.getMethodAnnotation(ApiEncrypt.class);
}
// 修改为
if (handler instanceof HandlerMethod) {
    HandlerMethod handlerMethod = (HandlerMethod) handler;
    return handlerMethod.getMethodAnnotation(ApiEncrypt.class);
}
  1. 其他修改
  • RuoYi-Vue-Plus获取ObjectUtils方法添加到common模块
  • SpringUtils.getBean方法只传字符串
  1. application.yml中添加配置

  2. 在一个数据字段上添加注解,测试功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值