From 00b6ca5dfe5328444efca61afdff609228621ffd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
<15040126243@163.com>
Date: Tue, 10 Jan 2023 17:40:42 +0800
Subject: [PATCH 01/13] update springboot-admin 2.7.9 => 2.7.10 update
easyexcel 3.1.4 => 3.1.5 update redisson 3.19.0 => 3.19.1
---
pom.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/pom.xml b/pom.xml
index 30d5132c8..de150be38 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,15 +22,15 @@
2.2.2
1.6.14
5.2.3
- 3.1.4
+ 3.1.5
2.3
1.33.0
3.5.3.1
3.9.1
5.8.11
4.10.0
- 2.7.9
- 3.19.0
+ 2.7.10
+ 3.19.1
2.2.3
3.5.2
2.14.2
From d8b486c793848d560bb4f97db96ae38941f39ff9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
<15040126243@163.com>
Date: Wed, 11 Jan 2023 15:12:32 +0800
Subject: [PATCH 02/13] =?UTF-8?q?remove=20=E5=88=A0=E9=99=A4=E9=94=99?=
=?UTF-8?q?=E8=AF=AF=E6=8F=90=E4=BA=A4=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-admin/src/main/resources/application.yml | 4 ----
1 file changed, 4 deletions(-)
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 77c68e496..0468a33ac 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -132,10 +132,6 @@ security:
- /favicon.ico
- /*/api-docs
- /*/api-docs/**
- - /swagger-ui/**
- - /webjars/**
- - /swagger-ui.html
- - /doc.html
# actuator 监控配置
- /actuator
- /actuator/**
From 52d33195ec8fd9c664c7cdf5b6a6c0836c099031 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
<15040126243@163.com>
Date: Wed, 11 Jan 2023 15:24:35 +0800
Subject: [PATCH 03/13] update sa-token 1.33.0 => 1.34.0
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index de150be38..8afb73f2b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
5.2.3
3.1.5
2.3
- 1.33.0
+ 1.34.0
3.5.3.1
3.9.1
5.8.11
From 242e26abee1dcf8b75b1d26b2c9f252a26512155 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
<15040126243@163.com>
Date: Thu, 12 Jan 2023 09:54:54 +0800
Subject: [PATCH 04/13] =?UTF-8?q?=F0=9F=A7=A7=E5=8F=91=E5=B8=83=204.5.0=20?=
=?UTF-8?q?=E6=96=B0=E6=98=A5=E7=89=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.run/ruoyi-monitor-admin.run.xml | 2 +-
.run/ruoyi-server.run.xml | 2 +-
.run/ruoyi-xxl-job-admin.run.xml | 2 +-
README.md | 2 +-
pom.xml | 4 ++--
ruoyi-admin/pom.xml | 2 +-
ruoyi-common/pom.xml | 2 +-
ruoyi-demo/pom.xml | 2 +-
ruoyi-extend/pom.xml | 2 +-
ruoyi-extend/ruoyi-monitor-admin/pom.xml | 2 +-
ruoyi-extend/ruoyi-xxl-job-admin/pom.xml | 2 +-
ruoyi-framework/pom.xml | 2 +-
ruoyi-generator/pom.xml | 2 +-
ruoyi-job/pom.xml | 2 +-
ruoyi-oss/pom.xml | 2 +-
ruoyi-sms/pom.xml | 2 +-
ruoyi-system/pom.xml | 2 +-
ruoyi-ui/package.json | 2 +-
ruoyi-ui/src/views/index.vue | 2 +-
script/docker/docker-compose.yml | 8 ++++----
20 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/.run/ruoyi-monitor-admin.run.xml b/.run/ruoyi-monitor-admin.run.xml
index 0eb44eec6..35b6b07f8 100644
--- a/.run/ruoyi-monitor-admin.run.xml
+++ b/.run/ruoyi-monitor-admin.run.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/.run/ruoyi-server.run.xml b/.run/ruoyi-server.run.xml
index c75e92af0..c0c575bee 100644
--- a/.run/ruoyi-server.run.xml
+++ b/.run/ruoyi-server.run.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/.run/ruoyi-xxl-job-admin.run.xml b/.run/ruoyi-xxl-job-admin.run.xml
index 2a30437f1..ae25907a8 100644
--- a/.run/ruoyi-xxl-job-admin.run.xml
+++ b/.run/ruoyi-xxl-job-admin.run.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/README.md b/README.md
index 1fd86c0c4..728871149 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
[](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/blob/master/LICENSE)
[](https://www.jetbrains.com/?from=RuoYi-Vue-Plus)
-[](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus)
+[](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus)
[]()
[]()
[]()
diff --git a/pom.xml b/pom.xml
index 8afb73f2b..d17587a0f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,14 +6,14 @@
com.ruoyi
ruoyi-vue-plus
- 4.4.0
+ 4.5.0
RuoYi-Vue-Plus
https://gitee.com/JavaLionLi/RuoYi-Vue-Plus
RuoYi-Vue-Plus后台管理系统
- 4.4.0
+ 4.5.0
2.7.7
UTF-8
UTF-8
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index a588f62da..91baa5cfa 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 4.4.0
+ 4.5.0
4.0.0
jar
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index f88534367..94896ecaa 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 4.4.0
+ 4.5.0
4.0.0
diff --git a/ruoyi-demo/pom.xml b/ruoyi-demo/pom.xml
index 46b45981d..31f712cbc 100644
--- a/ruoyi-demo/pom.xml
+++ b/ruoyi-demo/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 4.4.0
+ 4.5.0
4.0.0
diff --git a/ruoyi-extend/pom.xml b/ruoyi-extend/pom.xml
index 8b0e2fb67..a55645806 100644
--- a/ruoyi-extend/pom.xml
+++ b/ruoyi-extend/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 4.4.0
+ 4.5.0
4.0.0
ruoyi-extend
diff --git a/ruoyi-extend/ruoyi-monitor-admin/pom.xml b/ruoyi-extend/ruoyi-monitor-admin/pom.xml
index 687d95853..19fc04e20 100644
--- a/ruoyi-extend/ruoyi-monitor-admin/pom.xml
+++ b/ruoyi-extend/ruoyi-monitor-admin/pom.xml
@@ -5,7 +5,7 @@
ruoyi-extend
com.ruoyi
- 4.4.0
+ 4.5.0
4.0.0
jar
diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml
index 9305051d9..7e65df583 100644
--- a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml
+++ b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml
@@ -4,7 +4,7 @@
ruoyi-extend
com.ruoyi
- 4.4.0
+ 4.5.0
ruoyi-xxl-job-admin
jar
diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml
index 52e1b0651..072b5b2f2 100644
--- a/ruoyi-framework/pom.xml
+++ b/ruoyi-framework/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 4.4.0
+ 4.5.0
4.0.0
diff --git a/ruoyi-generator/pom.xml b/ruoyi-generator/pom.xml
index 3e55d4424..529048eed 100644
--- a/ruoyi-generator/pom.xml
+++ b/ruoyi-generator/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 4.4.0
+ 4.5.0
4.0.0
diff --git a/ruoyi-job/pom.xml b/ruoyi-job/pom.xml
index 4162183f4..1146c9254 100644
--- a/ruoyi-job/pom.xml
+++ b/ruoyi-job/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 4.4.0
+ 4.5.0
4.0.0
jar
diff --git a/ruoyi-oss/pom.xml b/ruoyi-oss/pom.xml
index 78e618e95..d25f2b8df 100644
--- a/ruoyi-oss/pom.xml
+++ b/ruoyi-oss/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 4.4.0
+ 4.5.0
4.0.0
diff --git a/ruoyi-sms/pom.xml b/ruoyi-sms/pom.xml
index 0ebabbb25..7180b058a 100644
--- a/ruoyi-sms/pom.xml
+++ b/ruoyi-sms/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 4.4.0
+ 4.5.0
4.0.0
diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml
index daa5aba7b..c1c28d9f8 100644
--- a/ruoyi-system/pom.xml
+++ b/ruoyi-system/pom.xml
@@ -5,7 +5,7 @@
ruoyi-vue-plus
com.ruoyi
- 4.4.0
+ 4.5.0
4.0.0
diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json
index 61a89f433..c1975834f 100644
--- a/ruoyi-ui/package.json
+++ b/ruoyi-ui/package.json
@@ -1,6 +1,6 @@
{
"name": "ruoyi-vue-plus",
- "version": "4.4.0",
+ "version": "4.5.0",
"description": "RuoYi-Vue-Plus后台管理系统",
"author": "LionLi",
"license": "MIT",
diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue
index 52f1a8768..7f7008e43 100644
--- a/ruoyi-ui/src/views/index.vue
+++ b/ruoyi-ui/src/views/index.vue
@@ -114,7 +114,7 @@ export default {
data() {
return {
// 版本号
- version: "4.4.0",
+ version: "4.5.0",
};
},
methods: {
diff --git a/script/docker/docker-compose.yml b/script/docker/docker-compose.yml
index 414069737..f0a489875 100644
--- a/script/docker/docker-compose.yml
+++ b/script/docker/docker-compose.yml
@@ -100,7 +100,7 @@ services:
network_mode: "host"
ruoyi-server1:
- image: ruoyi/ruoyi-server:4.4.0
+ image: ruoyi/ruoyi-server:4.5.0
container_name: ruoyi-server1
environment:
# 时区上海
@@ -115,7 +115,7 @@ services:
network_mode: "host"
ruoyi-server2:
- image: "ruoyi/ruoyi-server:4.4.0"
+ image: "ruoyi/ruoyi-server:4.5.0"
container_name: ruoyi-server2
environment:
# 时区上海
@@ -130,7 +130,7 @@ services:
network_mode: "host"
ruoyi-monitor-admin:
- image: ruoyi/ruoyi-monitor-admin:4.4.0
+ image: ruoyi/ruoyi-monitor-admin:4.5.0
container_name: ruoyi-monitor-admin
environment:
# 时区上海
@@ -142,7 +142,7 @@ services:
network_mode: "host"
ruoyi-xxl-job-admin:
- image: ruoyi/ruoyi-xxl-job-admin:4.4.0
+ image: ruoyi/ruoyi-xxl-job-admin:4.5.0
container_name: ruoyi-xxl-job-admin
environment:
# 时区上海
From f9d9eb2d70458839d292a5d34d18ddc79888f80e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
<15040126243@163.com>
Date: Thu, 12 Jan 2023 15:11:56 +0800
Subject: [PATCH 05/13] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E6=96=B0?=
=?UTF-8?q?=E7=89=88=E6=9C=AC=20Redisson=20=E5=AD=98=E5=9C=A8=E4=B8=8E=20b?=
=?UTF-8?q?oot=202.X=20=E7=9A=84=E5=85=BC=E5=AE=B9=E6=80=A7=E9=97=AE?=
=?UTF-8?q?=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 12 ++++++++++++
ruoyi-common/pom.xml | 6 ++++++
2 files changed, 18 insertions(+)
diff --git a/pom.xml b/pom.xml
index d17587a0f..5efd58c9a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -225,7 +225,19 @@
org.redisson
redisson-spring-boot-starter
${redisson.version}
+
+
+ org.redisson
+ redisson-spring-data-30
+
+
+
+ org.redisson
+ redisson-spring-data-27
+ ${redisson.version}
+
+
com.baomidou
lock4j-redisson-spring-boot-starter
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 94896ecaa..c438bf73c 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -143,6 +143,12 @@
redisson-spring-boot-starter
+
+ org.redisson
+ redisson-spring-data-27
+ ${redisson.version}
+
+
com.baomidou
lock4j-redisson-spring-boot-starter
From c79c3ee5b6f6b90751e5b96169db748762659972 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
<15040126243@163.com>
Date: Thu, 12 Jan 2023 15:18:18 +0800
Subject: [PATCH 06/13] =?UTF-8?q?remove=20=E5=88=A0=E9=99=A4=20=E5=A4=9A?=
=?UTF-8?q?=E4=BD=99=E7=89=88=E6=9C=AC=E5=8F=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-common/pom.xml | 1 -
1 file changed, 1 deletion(-)
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index c438bf73c..dfeead2a2 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -146,7 +146,6 @@
org.redisson
redisson-spring-data-27
- ${redisson.version}
From 10f88f54587bd7d6bb20b6b68e1dc9a806e59694 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
<15040126243@163.com>
Date: Thu, 12 Jan 2023 16:51:46 +0800
Subject: [PATCH 07/13] =?UTF-8?q?add=20=E6=96=B0=E5=A2=9E=20BeanCopyUtils#?=
=?UTF-8?q?mapToMap=20=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/ruoyi/common/utils/BeanCopyUtils.java | 22 ++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/BeanCopyUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/BeanCopyUtils.java
index 88161daac..e1bafee22 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/BeanCopyUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/BeanCopyUtils.java
@@ -12,6 +12,7 @@ import org.springframework.cglib.beans.BeanCopier;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.cglib.core.Converter;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -135,6 +136,25 @@ public class BeanCopyUtils {
return bean;
}
+ /**
+ * map拷贝到map
+ *
+ * @param map 数据来源
+ * @param clazz 返回的对象类型
+ * @return map对象
+ */
+ public static Map mapToMap(Map map, Class clazz) {
+ if (MapUtil.isEmpty(map)) {
+ return null;
+ }
+ if (ObjectUtil.isNull(clazz)) {
+ return null;
+ }
+ Map copyMap = new LinkedHashMap<>(map.size());
+ map.forEach((k, v) -> copyMap.put(k, copy(v, clazz)));
+ return copyMap;
+ }
+
/**
* BeanCopier属性缓存
* 缓存用于防止多次反射造成的性能问题
@@ -174,7 +194,7 @@ public class BeanCopyUtils {
private String genKey(Class> srcClass, Class> targetClass, Converter converter) {
final StringBuilder key = StrUtil.builder()
.append(srcClass.getName()).append('#').append(targetClass.getName());
- if(null != converter){
+ if (null != converter) {
key.append('#').append(converter.getClass().getName());
}
return key.toString();
From d8062087c7eaa46dcf2c756d8f82a59613a4b3ab Mon Sep 17 00:00:00 2001
From: zenghuafan <862592396@qq.com>
Date: Tue, 17 Jan 2023 14:24:42 +0800
Subject: [PATCH 08/13] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E5=AE=9E?=
=?UTF-8?q?=E4=BD=93=E7=B1=BB=E4=B8=AD=E6=A0=A1=E9=AA=8C=E6=B3=A8=E8=A7=A3?=
=?UTF-8?q?=E7=9A=84=E6=8F=90=E7=A4=BA=E4=BF=A1=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/ruoyi/common/core/domain/entity/SysDept.java | 6 +++---
.../ruoyi/common/core/domain/entity/SysDictData.java | 8 ++++----
.../ruoyi/common/core/domain/entity/SysDictType.java | 4 ++--
.../com/ruoyi/common/core/domain/entity/SysMenu.java | 8 ++++----
.../com/ruoyi/common/core/domain/entity/SysRole.java | 4 ++--
.../com/ruoyi/common/core/domain/entity/SysUser.java | 6 +++---
.../main/java/com/ruoyi/system/domain/SysConfig.java | 6 +++---
.../main/java/com/ruoyi/system/domain/SysNotice.java | 2 +-
.../src/main/java/com/ruoyi/system/domain/SysPost.java | 4 ++--
.../com/ruoyi/system/domain/bo/SysOssConfigBo.java | 10 +++++-----
10 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
index 857f9b8db..ba4a382c7 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
@@ -34,7 +34,7 @@ public class SysDept extends TreeEntity {
* 部门名称
*/
@NotBlank(message = "部门名称不能为空")
- @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
+ @Size(min = 0, max = 30, message = "部门名称长度不能超过{max}个字符")
private String deptName;
/**
@@ -51,14 +51,14 @@ public class SysDept extends TreeEntity {
/**
* 联系电话
*/
- @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符")
+ @Size(min = 0, max = 11, message = "联系电话长度不能超过{max}个字符")
private String phone;
/**
* 邮箱
*/
@Email(message = "邮箱格式不正确")
- @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
+ @Size(min = 0, max = 50, message = "邮箱长度不能超过{max}个字符")
private String email;
/**
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java
index e20f96aa7..4ed2c5483 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java
@@ -44,7 +44,7 @@ public class SysDictData extends BaseEntity {
*/
@ExcelProperty(value = "字典标签")
@NotBlank(message = "字典标签不能为空")
- @Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符")
+ @Size(min = 0, max = 100, message = "字典标签长度不能超过{max}个字符")
private String dictLabel;
/**
@@ -52,7 +52,7 @@ public class SysDictData extends BaseEntity {
*/
@ExcelProperty(value = "字典键值")
@NotBlank(message = "字典键值不能为空")
- @Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符")
+ @Size(min = 0, max = 100, message = "字典键值长度不能超过{max}个字符")
private String dictValue;
/**
@@ -60,13 +60,13 @@ public class SysDictData extends BaseEntity {
*/
@ExcelProperty(value = "字典类型")
@NotBlank(message = "字典类型不能为空")
- @Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符")
+ @Size(min = 0, max = 100, message = "字典类型长度不能超过{max}个字符")
private String dictType;
/**
* 样式属性(其他样式扩展)
*/
- @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符")
+ @Size(min = 0, max = 100, message = "样式属性长度不能超过{max}个字符")
private String cssClass;
/**
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java
index 36e38a971..76c20e102 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java
@@ -38,7 +38,7 @@ public class SysDictType extends BaseEntity {
*/
@ExcelProperty(value = "字典名称")
@NotBlank(message = "字典名称不能为空")
- @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符")
+ @Size(min = 0, max = 100, message = "字典类型名称长度不能超过{max}个字符")
private String dictName;
/**
@@ -46,7 +46,7 @@ public class SysDictType extends BaseEntity {
*/
@ExcelProperty(value = "字典类型")
@NotBlank(message = "字典类型不能为空")
- @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符")
+ @Size(min = 0, max = 100, message = "字典类型类型长度不能超过{max}个字符")
@Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)")
private String dictType;
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
index 201605f96..38bd93659 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
@@ -32,7 +32,7 @@ public class SysMenu extends TreeEntity {
* 菜单名称
*/
@NotBlank(message = "菜单名称不能为空")
- @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
+ @Size(min = 0, max = 50, message = "菜单名称长度不能超过{max}个字符")
private String menuName;
/**
@@ -44,13 +44,13 @@ public class SysMenu extends TreeEntity {
/**
* 路由地址
*/
- @Size(min = 0, max = 200, message = "路由地址不能超过200个字符")
+ @Size(min = 0, max = 200, message = "路由地址不能超过{max}个字符")
private String path;
/**
* 组件路径
*/
- @Size(min = 0, max = 200, message = "组件路径不能超过255个字符")
+ @Size(min = 0, max = 200, message = "组件路径不能超过{max}个字符")
private String component;
/**
@@ -88,7 +88,7 @@ public class SysMenu extends TreeEntity {
* 权限字符串
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
- @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符")
+ @Size(min = 0, max = 100, message = "权限标识长度不能超过{max}个字符")
private String perms;
/**
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
index 52682894a..a78cb03e7 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
@@ -44,7 +44,7 @@ public class SysRole extends BaseEntity {
*/
@ExcelProperty(value = "角色名称")
@NotBlank(message = "角色名称不能为空")
- @Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符")
+ @Size(min = 0, max = 30, message = "角色名称长度不能超过{max}个字符")
private String roleName;
/**
@@ -52,7 +52,7 @@ public class SysRole extends BaseEntity {
*/
@ExcelProperty(value = "角色权限")
@NotBlank(message = "权限字符不能为空")
- @Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符")
+ @Size(min = 0, max = 100, message = "权限字符长度不能超过{max}个字符")
private String roleKey;
/**
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
index f2d961b7a..8533b2f8f 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -44,14 +44,14 @@ public class SysUser extends BaseEntity {
*/
@Xss(message = "用户账号不能包含脚本字符")
@NotBlank(message = "用户账号不能为空")
- @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
+ @Size(min = 0, max = 30, message = "用户账号长度不能超过{max}个字符")
private String userName;
/**
* 用户昵称
*/
@Xss(message = "用户昵称不能包含脚本字符")
- @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
+ @Size(min = 0, max = 30, message = "用户昵称长度不能超过{max}个字符")
private String nickName;
/**
@@ -64,7 +64,7 @@ public class SysUser extends BaseEntity {
*/
@Sensitive(strategy = SensitiveStrategy.EMAIL)
@Email(message = "邮箱格式不正确")
- @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
+ @Size(min = 0, max = 50, message = "邮箱长度不能超过{max}个字符")
private String email;
/**
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java
index 40bc2821d..ca9a77ce3 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java
@@ -37,7 +37,7 @@ public class SysConfig extends BaseEntity {
*/
@ExcelProperty(value = "参数名称")
@NotBlank(message = "参数名称不能为空")
- @Size(min = 0, max = 100, message = "参数名称不能超过100个字符")
+ @Size(min = 0, max = 100, message = "参数名称不能超过{max}个字符")
private String configName;
/**
@@ -45,7 +45,7 @@ public class SysConfig extends BaseEntity {
*/
@ExcelProperty(value = "参数键名")
@NotBlank(message = "参数键名长度不能为空")
- @Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符")
+ @Size(min = 0, max = 100, message = "参数键名长度不能超过{max}个字符")
private String configKey;
/**
@@ -53,7 +53,7 @@ public class SysConfig extends BaseEntity {
*/
@ExcelProperty(value = "参数键值")
@NotBlank(message = "参数键值不能为空")
- @Size(min = 0, max = 500, message = "参数键值长度不能超过500个字符")
+ @Size(min = 0, max = 500, message = "参数键值长度不能超过{max}个字符")
private String configValue;
/**
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java
index f9457406a..dec401e3e 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java
@@ -32,7 +32,7 @@ public class SysNotice extends BaseEntity {
*/
@Xss(message = "公告标题不能包含脚本字符")
@NotBlank(message = "公告标题不能为空")
- @Size(min = 0, max = 50, message = "公告标题不能超过50个字符")
+ @Size(min = 0, max = 50, message = "公告标题不能超过{max}个字符")
private String noticeTitle;
/**
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java
index 1edabf509..ecb84f4b4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java
@@ -39,7 +39,7 @@ public class SysPost extends BaseEntity {
*/
@ExcelProperty(value = "岗位编码")
@NotBlank(message = "岗位编码不能为空")
- @Size(min = 0, max = 64, message = "岗位编码长度不能超过64个字符")
+ @Size(min = 0, max = 64, message = "岗位编码长度不能超过{max}个字符")
private String postCode;
/**
@@ -47,7 +47,7 @@ public class SysPost extends BaseEntity {
*/
@ExcelProperty(value = "岗位名称")
@NotBlank(message = "岗位名称不能为空")
- @Size(min = 0, max = 50, message = "岗位名称长度不能超过50个字符")
+ @Size(min = 0, max = 50, message = "岗位名称长度不能超过{max}个字符")
private String postName;
/**
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java
index af289376c..fdaf62c47 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java
@@ -32,28 +32,28 @@ public class SysOssConfigBo extends BaseEntity {
* 配置key
*/
@NotBlank(message = "配置key不能为空", groups = {AddGroup.class, EditGroup.class})
- @Size(min = 2, max = 100, message = "configKey长度必须介于2和20 之间")
+ @Size(min = 2, max = 100, message = "configKey长度必须介于{min}和{max} 之间")
private String configKey;
/**
* accessKey
*/
@NotBlank(message = "accessKey不能为空", groups = {AddGroup.class, EditGroup.class})
- @Size(min = 2, max = 100, message = "accessKey长度必须介于2和100 之间")
+ @Size(min = 2, max = 100, message = "accessKey长度必须介于{min}和{max} 之间")
private String accessKey;
/**
* 秘钥
*/
@NotBlank(message = "secretKey不能为空", groups = {AddGroup.class, EditGroup.class})
- @Size(min = 2, max = 100, message = "secretKey长度必须介于2和100 之间")
+ @Size(min = 2, max = 100, message = "secretKey长度必须介于{min}和{max} 之间")
private String secretKey;
/**
* 桶名称
*/
@NotBlank(message = "桶名称不能为空", groups = {AddGroup.class, EditGroup.class})
- @Size(min = 2, max = 100, message = "bucketName长度必须介于2和100之间")
+ @Size(min = 2, max = 100, message = "bucketName长度必须介于{min}和{max}之间")
private String bucketName;
/**
@@ -65,7 +65,7 @@ public class SysOssConfigBo extends BaseEntity {
* 访问站点
*/
@NotBlank(message = "访问站点不能为空", groups = {AddGroup.class, EditGroup.class})
- @Size(min = 2, max = 100, message = "endpoint长度必须介于2和100之间")
+ @Size(min = 2, max = 100, message = "endpoint长度必须介于{min}和{max}之间")
private String endpoint;
/**
From 6fb34a771751935191d511957f2c0b7e0d2b15a2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
<15040126243@163.com>
Date: Wed, 18 Jan 2023 11:42:34 +0800
Subject: [PATCH 09/13] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9=20oss=20=E9=85=8D=E7=BD=AE=E9=A1=B5=E9=9D=A2=E5=BC=80?=
=?UTF-8?q?=E5=85=B3=E8=AF=B4=E6=98=8E=20=E9=81=BF=E5=85=8D=E9=80=A0?=
=?UTF-8?q?=E6=88=90=E8=AF=AF=E8=A7=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-ui/src/views/system/oss/config.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ruoyi-ui/src/views/system/oss/config.vue b/ruoyi-ui/src/views/system/oss/config.vue
index 0120641d8..4ae44495a 100644
--- a/ruoyi-ui/src/views/system/oss/config.vue
+++ b/ruoyi-ui/src/views/system/oss/config.vue
@@ -87,7 +87,7 @@
custom
-
+
Date: Wed, 18 Jan 2023 11:59:08 +0800
Subject: [PATCH 10/13] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9=20oss=20=E9=85=8D=E7=BD=AE=E9=A1=B5=E9=9D=A2=E5=BC=80?=
=?UTF-8?q?=E5=85=B3=E8=AF=B4=E6=98=8E=20=E9=81=BF=E5=85=8D=E9=80=A0?=
=?UTF-8?q?=E6=88=90=E8=AF=AF=E8=A7=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/ruoyi/system/domain/SysOssConfig.java | 2 +-
ruoyi-ui/src/views/system/oss/config.vue | 10 +++-------
2 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java
index 7f2b05f6a..ac5e5a3ac 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java
@@ -68,7 +68,7 @@ public class SysOssConfig extends BaseEntity {
private String region;
/**
- * 状态(0正常 1停用)
+ * 是否默认(0=是,1=否)
*/
private String status;
diff --git a/ruoyi-ui/src/views/system/oss/config.vue b/ruoyi-ui/src/views/system/oss/config.vue
index 4ae44495a..4b3efdea9 100644
--- a/ruoyi-ui/src/views/system/oss/config.vue
+++ b/ruoyi-ui/src/views/system/oss/config.vue
@@ -19,14 +19,10 @@
@keyup.enter.native="handleQuery"
/>
-
+
-
+
+
From b34c2fd6eef6ee166e9fceb8553055e20e97cb65 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
<15040126243@163.com>
Date: Wed, 18 Jan 2023 12:00:19 +0800
Subject: [PATCH 11/13] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9=20oss=20=E9=85=8D=E7=BD=AE=E9=A1=B5=E9=9D=A2=E5=BC=80?=
=?UTF-8?q?=E5=85=B3=E8=AF=B4=E6=98=8E=20=E9=81=BF=E5=85=8D=E9=80=A0?=
=?UTF-8?q?=E6=88=90=E8=AF=AF=E8=A7=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java | 2 +-
.../main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java
index fdaf62c47..2e257e8ea 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java
@@ -79,7 +79,7 @@ public class SysOssConfigBo extends BaseEntity {
private String isHttps;
/**
- * 状态(0=正常,1=停用)
+ * 是否默认(0=是,1=否)
*/
private String status;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java
index 616e4e82d..9edc60c2b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java
@@ -68,7 +68,7 @@ public class SysOssConfigVo {
private String region;
/**
- * 状态(0=正常,1=停用)
+ * 是否默认(0=是,1=否)
*/
private String status;
From 540afd839d138c120870ec47f8b66cbf96b9ec46 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
<15040126243@163.com>
Date: Wed, 18 Jan 2023 12:06:31 +0800
Subject: [PATCH 12/13] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=8E=BB?=
=?UTF-8?q?=E9=99=A4=E6=97=A0=E7=94=A8=E5=AD=97=E5=85=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-ui/src/views/system/oss/config.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ruoyi-ui/src/views/system/oss/config.vue b/ruoyi-ui/src/views/system/oss/config.vue
index 4b3efdea9..d04571517 100644
--- a/ruoyi-ui/src/views/system/oss/config.vue
+++ b/ruoyi-ui/src/views/system/oss/config.vue
@@ -189,7 +189,7 @@ import {
export default {
name: "OssConfig",
- dicts: ['sys_yes_no', 'sys_normal_disable'],
+ dicts: ['sys_yes_no'],
data() {
return {
// 按钮loading
From e20dacbfd92b48286104ace1ad8806c8b79c3929 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=5F=E8=80=81=E9=A9=AC=5F?=
Date: Wed, 18 Jan 2023 04:13:43 +0000
Subject: [PATCH 13/13] =?UTF-8?q?!274=20add=20=E6=96=B0=E5=A2=9E=20?=
=?UTF-8?q?=E5=9F=BA=E4=BA=8E=20Mybatis=20=E5=AE=9E=E7=8E=B0=E6=95=B0?=
=?UTF-8?q?=E6=8D=AE=E5=BA=93=E5=AD=97=E6=AE=B5=E5=8A=A0=E8=A7=A3=E5=AF=86?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 8 ++
.../src/main/resources/application.yml | 13 ++
.../java/com/ruoyi/test/EncryptUnitTest.java | 37 ++++++
ruoyi-common/pom.xml | 6 +
.../ruoyi/common/annotation/EncryptField.java | 44 +++++++
.../ruoyi/common/encrypt/EncryptContext.java | 35 +++++
.../com/ruoyi/common/encrypt/IEncryptor.java | 46 +++++++
.../encrypt/encryptor/AbstractEncryptor.java | 16 +++
.../encrypt/encryptor/AesEncryptor.java | 87 +++++++++++++
.../encrypt/encryptor/Base64Encryptor.java | 59 +++++++++
.../encrypt/encryptor/RsaEncryptor.java | 83 ++++++++++++
.../encrypt/encryptor/Sm2Encryptor.java | 85 +++++++++++++
.../encrypt/encryptor/Sm4Encryptor.java | 87 +++++++++++++
.../com/ruoyi/common/enums/AlgorithmType.java | 42 ++++++
.../com/ruoyi/common/enums/EncodeType.java | 20 +++
.../java/com/ruoyi/demo/domain/TestDemo.java | 6 +
.../framework/config/EncryptorConfig.java | 37 ++++++
.../properties/EncryptorProperties.java | 49 +++++++
.../encrypt/EncryptedFieldsCache.java | 33 +++++
.../framework/encrypt/EncryptorManager.java | 120 ++++++++++++++++++
.../encrypt/MybatisDecryptInterceptor.java | 105 +++++++++++++++
.../encrypt/MybatisEncryptInterceptor.java | 111 ++++++++++++++++
22 files changed, 1129 insertions(+)
create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/test/EncryptUnitTest.java
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/annotation/EncryptField.java
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/encrypt/EncryptContext.java
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/encrypt/IEncryptor.java
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/AbstractEncryptor.java
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/AesEncryptor.java
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Base64Encryptor.java
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/RsaEncryptor.java
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm2Encryptor.java
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm4Encryptor.java
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/AlgorithmType.java
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/EncodeType.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/EncryptorConfig.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/EncryptorProperties.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptedFieldsCache.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptorManager.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisDecryptInterceptor.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisEncryptInterceptor.java
diff --git a/pom.xml b/pom.xml
index 5efd58c9a..a897d31d9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,6 +36,7 @@
2.14.2
2.3.1
1.18.24
+ 1.72
1.33
@@ -264,6 +265,13 @@
${snakeyaml.version}
+
+
+ org.bouncycastle
+ bcprov-jdk15to18
+ ${bouncycastle.version}
+
+
com.ruoyi
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 0468a33ac..6c1fa63e2 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -179,6 +179,19 @@ mybatis-plus:
updateStrategy: NOT_NULL
# 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件
where-strategy: NOT_NULL
+# 数据加密
+mybatis-encryptor:
+ # 是否开启加密
+ enabled: false
+ # 默认加密算法
+ algorithm: base64
+ # 安全秘钥。对称算法的秘钥。如:AES,SM4
+# password: QBcc3SHK2G4ijyfl5XQ7@2g!N2j2jRDR
+# # 公私钥。非对称算法的公私钥,如:SM2,RSA
+# publicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCDt41GIcWvY6/tpjOLoWY78Oy00uWcNbMRG/8DRoS79/h2D+pV8uxV+0ezaN+fBFCZnK8TdJcPeU4EnNRUh/8HEY33KFvZ700n+Gj5BHUUDKzx3UVFNuF49UI/yoJ8rz6VQQHO79KK89VwmSMO77Tfee1ofe0STY6IwMt/MwaoKwIDAQAB
+# privateKey: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIO3jUYhxa9jr+2mM4uhZjvw7LTS5Zw1sxEb/wNGhLv3+HYP6lXy7FX7R7No358EUJmcrxN0lw95TgSc1FSH/wcRjfcoW9nvTSf4aPkEdRQMrPHdRUU24Xj1Qj/KgnyvPpVBAc7v0orz1XCZIw7vtN957Wh97RJNjojAy38zBqgrAgMBAAECgYAkXx4qvI6rFNryw88+Am6JpMioUghHb2ioE9QCYomqohnA+DocS71JLN8qwo3lijp7gJGzzKEeC8Aoc+oKAZfBQQwPP0K/ql+NcLdlqNAr+XyzkZrLJD/BfluQ6mXI23tjonWnPPZ1Et9HC3zXRQPiuh7Ff6UoqatTMI3OIbSyuQJBAPbaJpVYmIsWJdpvaAC6hcGgR/vbG9yX8VphPn8/2wsm2MmQrRkUoKkudE/veX3KQjGikDwo9+bT6aBl+nn2DUUCQQCImSGZFNcGqhMLyRGVogP6fh0YZSEQAhFbZ69nQmplqbie+dREhODH5Vs5F0C2aL5iSR/UaIDkNEA1auX7x56vAkAFWjON927PTTqi4tmBconl6eDFsDmJbe34xLUDM1I/iqcWr8FhEtZs9Knm9c1PkewfgWPZOhYt9hhRtwRYUqJ1AkAPvQ0I9US9KNVe80DKa8tnjiZODEDd9k8HqA+mpxlZM0/pSUGyz1iSz5NOJaa4HaNp8aDwOUY4hOis/u8Wrm5TAkEA00YeUsaXlMyMF/5pjols44tXb54AjAC2mH66pz9JsKg7pKpWVOpEV5rMY58CGZHWau69vGLZnCd1coeMw77YAQ==
+# # 编码方式,base64/hex。默认base64
+# encode: base64
# Swagger配置
swagger:
diff --git a/ruoyi-admin/src/test/java/com/ruoyi/test/EncryptUnitTest.java b/ruoyi-admin/src/test/java/com/ruoyi/test/EncryptUnitTest.java
new file mode 100644
index 000000000..b049232ab
--- /dev/null
+++ b/ruoyi-admin/src/test/java/com/ruoyi/test/EncryptUnitTest.java
@@ -0,0 +1,37 @@
+package com.ruoyi.test;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.ruoyi.demo.domain.TestDemo;
+import com.ruoyi.demo.mapper.TestDemoMapper;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+
+/**
+ * 加密单元测试案例
+ *
+ * @author 老马
+ * @date 2023-01-12 08:53
+ */
+@SpringBootTest
+@SaIgnore
+@DisplayName("加密测试")
+public class EncryptUnitTest {
+
+ @Resource
+ private TestDemoMapper demoMapper;
+
+ @Test
+ public void testCrypt() {
+ TestDemo demo = new TestDemo();
+ demo.setTestKey("测试的key");
+ demo.setValue("测试的value");
+ this.demoMapper.insert(demo);
+ System.out.println(demo);
+ TestDemo testDemo = this.demoMapper.selectById(demo.getId());
+ System.out.println(testDemo);
+ }
+
+}
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index dfeead2a2..f302d3e7b 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -153,6 +153,12 @@
lock4j-redisson-spring-boot-starter
+
+
+ org.bouncycastle
+ bcprov-jdk15to18
+
+
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/EncryptField.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/EncryptField.java
new file mode 100644
index 000000000..d44eb293c
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/EncryptField.java
@@ -0,0 +1,44 @@
+package com.ruoyi.common.annotation;
+
+import com.ruoyi.common.enums.AlgorithmType;
+import com.ruoyi.common.enums.EncodeType;
+
+import java.lang.annotation.*;
+
+/**
+ * 字段加密注解
+ *
+ * @author 老马
+ */
+@Documented
+@Inherited
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface EncryptField {
+
+ /**
+ * 加密算法
+ */
+ AlgorithmType algorithm() default AlgorithmType.BASE64;
+
+ /**
+ * 秘钥。AES、SM4需要
+ */
+ String password() default "";
+
+ /**
+ * 公钥。RSA、SM2需要
+ */
+ String publicKey() default "";
+
+ /**
+ * 公钥。RSA、SM2需要
+ */
+ String privateKey() default "";
+
+ /**
+ * 编码方式。对加密算法为BASE64的不起作用
+ */
+ EncodeType encode() default EncodeType.BASE64;
+
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/EncryptContext.java b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/EncryptContext.java
new file mode 100644
index 000000000..3340ecdc1
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/EncryptContext.java
@@ -0,0 +1,35 @@
+package com.ruoyi.common.encrypt;
+
+import com.ruoyi.common.enums.EncodeType;
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * 加密上下文。用于encryptor传递必要的参数。
+ * 隔离配置和注解
+ *
+ * @author 老马
+ * @date 2023-01-17 08:31
+ */
+@Data
+public class EncryptContext {
+ /**
+ * 安全秘钥
+ */
+ private String password;
+
+ /**
+ * 公钥
+ */
+ private String publicKey;
+
+ /**
+ * 私钥
+ */
+ private String privateKey;
+
+ /**
+ * 编码方式,base64/hex
+ */
+ private EncodeType encode;
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/IEncryptor.java b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/IEncryptor.java
new file mode 100644
index 000000000..fae0327c1
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/IEncryptor.java
@@ -0,0 +1,46 @@
+package com.ruoyi.common.encrypt;
+
+import com.ruoyi.common.enums.AlgorithmType;
+import com.ruoyi.common.enums.EncodeType;
+
+/**
+ * 加解者
+ *
+ * @author 老马
+ * @date 2023-01-10 16:08
+ */
+public interface IEncryptor {
+
+ /**
+ * 获得当前算法
+ *
+ * @return com.ruoyi.common.enums.AlgorithmType
+ * @author 老马
+ * @date 2023/1/11 11:18
+ */
+ AlgorithmType algorithm();
+
+ /**
+ * 加密
+ *
+ * @param value 待加密字符串
+ * @param encodeType 加密后的编码格式
+ * @return java.lang.String 加密后的字符串
+ * @throws Exception 抛出异常
+ * @author 老马
+ * @date 2023/1/10 16:38
+ */
+ String encrypt(String value, EncodeType encodeType) throws Exception;
+
+ /**
+ * 解密
+ *
+ * @param value 待加密字符串
+ * @param encodeType 加密后的编码格式
+ * @return java.lang.String 解密后的字符串
+ * @throws Exception 抛出异常
+ * @author 老马
+ * @date 2023/1/10 16:38
+ */
+ String decrypt(String value, EncodeType encodeType) throws Exception;
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/AbstractEncryptor.java b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/AbstractEncryptor.java
new file mode 100644
index 000000000..5e7ce73d0
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/AbstractEncryptor.java
@@ -0,0 +1,16 @@
+package com.ruoyi.common.encrypt.encryptor;
+
+import com.ruoyi.common.encrypt.EncryptContext;
+import com.ruoyi.common.encrypt.IEncryptor;
+
+/**
+ * 所有加密执行者的基类
+ *
+ * @author 老马
+ * @date 2023-01-17 16:52
+ */
+public abstract class AbstractEncryptor implements IEncryptor {
+ public AbstractEncryptor(EncryptContext context) {
+ //子类必须实现带参数的构造方法
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/AesEncryptor.java b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/AesEncryptor.java
new file mode 100644
index 000000000..f0d3a3069
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/AesEncryptor.java
@@ -0,0 +1,87 @@
+package com.ruoyi.common.encrypt.encryptor;
+
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.SecureUtil;
+import cn.hutool.crypto.symmetric.AES;
+import com.ruoyi.common.encrypt.EncryptContext;
+import com.ruoyi.common.enums.AlgorithmType;
+import com.ruoyi.common.enums.EncodeType;
+
+import java.nio.charset.StandardCharsets;
+
+/**
+ * AES算法实现
+ *
+ * @author 老马
+ * @date 2023-01-06 11:39
+ */
+public class AesEncryptor extends AbstractEncryptor {
+
+ private AES aes = null;
+
+ public AesEncryptor(EncryptContext context) {
+ super(context);
+ String password = context.getPassword();
+ if (StrUtil.isBlank(password)) {
+ throw new RuntimeException("aes没有获得秘钥信息");
+ }
+ // aes算法的秘钥要求是16位、24位、32位
+ int[] array = {16, 24, 32};
+ if(!ArrayUtil.contains(array, password.length())) {
+ throw new RuntimeException("aes秘钥长度应该为16位、24位、32位,实际为"+password.length()+"位");
+ }
+ aes = SecureUtil.aes(context.getPassword().getBytes(StandardCharsets.UTF_8));
+ }
+
+ /**
+ * 获得当前算法
+ *
+ * @return com.ruoyi.common.enums.AlgorithmType
+ * @author 老马
+ * @date 2023/1/11 11:18
+ */
+ @Override
+ public AlgorithmType algorithm() {
+ return AlgorithmType.AES;
+ }
+
+ /**
+ * 加密
+ *
+ * @param value 待加密字符串
+ * @param encodeType 加密后的编码格式
+ * @return java.lang.String
+ * @author 老马
+ * @date 2023/1/10 16:38
+ */
+ @Override
+ public String encrypt(String value, EncodeType encodeType) throws Exception {
+ if (ObjectUtil.isNotNull(this.aes)) {
+ if (encodeType == EncodeType.HEX) {
+ return aes.encryptHex(value);
+ } else {
+ return aes.encryptBase64(value);
+ }
+ }
+ return value;
+ }
+
+ /**
+ * 解密
+ *
+ * @param value 待加密字符串
+ * @param encodeType 加密后的编码格式
+ * @return java.lang.String
+ * @author 老马
+ * @date 2023/1/10 16:38
+ */
+ @Override
+ public String decrypt(String value, EncodeType encodeType) throws Exception {
+ if (ObjectUtil.isNotNull(this.aes)) {
+ return this.aes.decryptStr(value);
+ }
+ return value;
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Base64Encryptor.java b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Base64Encryptor.java
new file mode 100644
index 000000000..bd5038e4b
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Base64Encryptor.java
@@ -0,0 +1,59 @@
+package com.ruoyi.common.encrypt.encryptor;
+
+import cn.hutool.core.codec.Base64;
+import com.ruoyi.common.encrypt.EncryptContext;
+import com.ruoyi.common.enums.AlgorithmType;
+import com.ruoyi.common.enums.EncodeType;
+
+/**
+ * Base64算法实现。不建议在生产环境使用
+ *
+ * @author 老马
+ * @date 2023-01-06 10:00
+ */
+public class Base64Encryptor extends AbstractEncryptor {
+
+ public Base64Encryptor(EncryptContext context) {
+ super(context);
+ }
+
+ /**
+ * 获得当前算法
+ *
+ * @return com.ruoyi.common.enums.AlgorithmType
+ * @author 老马
+ * @date 2023/1/11 11:18
+ */
+ @Override
+ public AlgorithmType algorithm() {
+ return AlgorithmType.BASE64;
+ }
+
+ /**
+ * 加密
+ *
+ * @param value 待加密字符串
+ * @param encodeType 加密后的编码格式
+ * @return java.lang.String
+ * @author 老马
+ * @date 2023/1/10 16:38
+ */
+ @Override
+ public String encrypt(String value, EncodeType encodeType) throws Exception {
+ return Base64.encode(value);
+ }
+
+ /**
+ * 解密
+ *
+ * @param value 待加密字符串
+ * @param encodeType 加密后的编码格式
+ * @return java.lang.String
+ * @author 老马
+ * @date 2023/1/10 16:38
+ */
+ @Override
+ public String decrypt(String value, EncodeType encodeType) throws Exception {
+ return Base64.decodeStr(value);
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/RsaEncryptor.java b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/RsaEncryptor.java
new file mode 100644
index 000000000..40d767c06
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/RsaEncryptor.java
@@ -0,0 +1,83 @@
+package com.ruoyi.common.encrypt.encryptor;
+
+import cn.hutool.core.codec.Base64;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.crypto.SecureUtil;
+import cn.hutool.crypto.asymmetric.KeyType;
+import cn.hutool.crypto.asymmetric.RSA;
+import com.ruoyi.common.encrypt.EncryptContext;
+import com.ruoyi.common.enums.AlgorithmType;
+import com.ruoyi.common.enums.EncodeType;
+import com.ruoyi.common.utils.StringUtils;
+
+
+/**
+ * RSA算法实现
+ *
+ * @author 老马
+ * @date 2023-01-06 09:37
+ */
+public class RsaEncryptor extends AbstractEncryptor {
+
+ private RSA rsa = null;
+
+ public RsaEncryptor(EncryptContext context) {
+ super(context);
+ String privateKey = context.getPrivateKey();
+ String publicKey = context.getPublicKey();
+ if (StringUtils.isAnyEmpty(privateKey, publicKey)) {
+ throw new RuntimeException("rsa公私钥均需要提供,公钥加密,私钥解密。");
+ }
+ this.rsa = SecureUtil.rsa(Base64.decode(privateKey), Base64.decode(publicKey));
+ }
+
+ /**
+ * 获得当前算法
+ *
+ * @return com.ruoyi.common.enums.AlgorithmType
+ * @author 老马
+ * @date 2023/1/11 11:18
+ */
+ @Override
+ public AlgorithmType algorithm() {
+ return AlgorithmType.RSA;
+ }
+
+ /**
+ * 加密
+ *
+ * @param value 待加密字符串
+ * @param encodeType 加密后的编码格式
+ * @return java.lang.String
+ * @author 老马
+ * @date 2023/1/10 16:38
+ */
+ @Override
+ public String encrypt(String value, EncodeType encodeType) throws Exception {
+ if (ObjectUtil.isNotNull(this.rsa)) {
+ if (encodeType == EncodeType.HEX) {
+ return rsa.encryptHex(value, KeyType.PublicKey);
+ } else {
+ return rsa.encryptBase64(value, KeyType.PublicKey);
+ }
+ }
+ return value;
+ }
+
+ /**
+ * 解密
+ *
+ * @param value 待加密字符串
+ * @param encodeType 加密后的编码格式
+ * @return java.lang.String
+ * @author 老马
+ * @date 2023/1/10 16:38
+ */
+ @Override
+ public String decrypt(String value, EncodeType encodeType) throws Exception {
+ if (ObjectUtil.isNotNull(this.rsa)) {
+ return this.rsa.decryptStr(value, KeyType.PrivateKey);
+ }
+ return value;
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm2Encryptor.java b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm2Encryptor.java
new file mode 100644
index 000000000..71f0620ca
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm2Encryptor.java
@@ -0,0 +1,85 @@
+package com.ruoyi.common.encrypt.encryptor;
+
+
+import cn.hutool.core.codec.Base64;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.crypto.SmUtil;
+import cn.hutool.crypto.asymmetric.KeyType;
+import cn.hutool.crypto.asymmetric.SM2;
+import com.ruoyi.common.encrypt.EncryptContext;
+import com.ruoyi.common.enums.AlgorithmType;
+import com.ruoyi.common.enums.EncodeType;
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * sm2算法实现
+ *
+ * @author 老马
+ * @date 2023-01-06 17:13
+ */
+public class Sm2Encryptor extends AbstractEncryptor {
+
+ private SM2 sm2 = null;
+
+ public Sm2Encryptor(EncryptContext context) {
+ super(context);
+ String privateKey = context.getPrivateKey();
+ String publicKey = context.getPublicKey();
+ if (StringUtils.isAnyEmpty(privateKey, publicKey)) {
+ throw new RuntimeException("sm2公私钥均需要提供,公钥加密,私钥解密。");
+ }
+ this.sm2 = SmUtil.sm2(Base64.decode(privateKey), Base64.decode(publicKey));
+ }
+
+ /**
+ * 获得当前算法
+ *
+ * @return com.ruoyi.common.enums.AlgorithmType
+ * @author 老马
+ * @date 2023/1/11 11:18
+ */
+ @Override
+ public AlgorithmType algorithm() {
+ return AlgorithmType.SM2;
+ }
+
+ /**
+ * 加密
+ *
+ * @param value 待加密字符串
+ * @param encodeType 加密后的编码格式
+ * @return java.lang.String
+ * @throws Exception 抛出异常
+ * @author 老马
+ * @date 2023/1/10 16:38
+ */
+ @Override
+ public String encrypt(String value, EncodeType encodeType) throws Exception {
+ if (ObjectUtil.isNotNull(this.sm2)) {
+ if (encodeType == EncodeType.HEX) {
+ return sm2.encryptHex(value, KeyType.PublicKey);
+ } else {
+ return sm2.encryptBase64(value, KeyType.PublicKey);
+ }
+ }
+ return value;
+ }
+
+ /**
+ * 解密
+ *
+ * @param value 待加密字符串
+ * @param encodeType 加密后的编码格式
+ * @return java.lang.String
+ * @throws Exception 抛出异常
+ * @author 老马
+ * @date 2023/1/10 16:38
+ */
+ @Override
+ public String decrypt(String value, EncodeType encodeType) throws Exception {
+ if (ObjectUtil.isNotNull(this.sm2)) {
+ return this.sm2.decryptStr(value, KeyType.PrivateKey);
+ }
+ return value;
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm4Encryptor.java b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm4Encryptor.java
new file mode 100644
index 000000000..f30afdce6
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm4Encryptor.java
@@ -0,0 +1,87 @@
+package com.ruoyi.common.encrypt.encryptor;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.SmUtil;
+import cn.hutool.crypto.symmetric.SM4;
+import com.ruoyi.common.encrypt.EncryptContext;
+import com.ruoyi.common.enums.AlgorithmType;
+import com.ruoyi.common.enums.EncodeType;
+
+import java.nio.charset.StandardCharsets;
+
+/**
+ * sm4算法实现
+ *
+ * @author 老马
+ * @date 2023-01-06 17:40
+ */
+public class Sm4Encryptor extends AbstractEncryptor {
+
+ private SM4 sm4 = null;
+
+ public Sm4Encryptor(EncryptContext context) {
+ super(context);
+ String password = context.getPassword();
+ if (StrUtil.isBlank(password)) {
+ throw new RuntimeException("sm4没有获得秘钥信息");
+ }
+ // sm4算法的秘钥要求是16位长度
+ if (16 != password.length()) {
+ throw new RuntimeException("sm4秘钥长度应该为16位,实际为" + password.length() + "位");
+ }
+ this.sm4 = SmUtil.sm4(password.getBytes(StandardCharsets.UTF_8));
+ }
+
+ /**
+ * 获得当前算法
+ *
+ * @return com.ruoyi.common.enums.AlgorithmType
+ * @author 老马
+ * @date 2023/1/11 11:18
+ */
+ @Override
+ public AlgorithmType algorithm() {
+ return AlgorithmType.SM4;
+ }
+
+ /**
+ * 加密
+ *
+ * @param value 待加密字符串
+ * @param encodeType 加密后的编码格式
+ * @return java.lang.String
+ * @throws Exception 抛出异常
+ * @author 老马
+ * @date 2023/1/10 16:38
+ */
+ @Override
+ public String encrypt(String value, EncodeType encodeType) throws Exception {
+ if (ObjectUtil.isNotNull(this.sm4)) {
+ if (encodeType == EncodeType.HEX) {
+ return sm4.encryptHex(value);
+ } else {
+ return sm4.encryptBase64(value);
+ }
+ }
+ return value;
+ }
+
+ /**
+ * 解密
+ *
+ * @param value 待加密字符串
+ * @param encodeType 加密后的编码格式
+ * @return java.lang.String
+ * @throws Exception 抛出异常
+ * @author 老马
+ * @date 2023/1/10 16:38
+ */
+ @Override
+ public String decrypt(String value, EncodeType encodeType) throws Exception {
+ if (ObjectUtil.isNotNull(this.sm4)) {
+ return this.sm4.decryptStr(value);
+ }
+ return value;
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/AlgorithmType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/AlgorithmType.java
new file mode 100644
index 000000000..eb9b830a0
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/AlgorithmType.java
@@ -0,0 +1,42 @@
+package com.ruoyi.common.enums;
+
+import com.ruoyi.common.encrypt.IEncryptor;
+import com.ruoyi.common.encrypt.encryptor.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 算法名称
+ *
+ * @author 老马
+ */
+@Getter
+@AllArgsConstructor
+public enum AlgorithmType {
+ /**
+ * base64
+ */
+ BASE64(Base64Encryptor.class),
+
+ /**
+ * aes
+ */
+ AES(AesEncryptor.class),
+
+ /**
+ * rsa
+ */
+ RSA(RsaEncryptor.class),
+
+ /**
+ * sm2
+ */
+ SM2(Sm2Encryptor.class),
+
+ /**
+ * sm4
+ */
+ SM4(Sm4Encryptor.class);
+
+ private final Class extends IEncryptor> clazz;
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/EncodeType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/EncodeType.java
new file mode 100644
index 000000000..24cdab63a
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/EncodeType.java
@@ -0,0 +1,20 @@
+package com.ruoyi.common.enums;
+
+/**
+ * 编码类型
+ *
+ * @author 老马
+ * @date 2023-01-11 11:39
+ */
+public enum EncodeType {
+ /**
+ * base64编码
+ */
+ BASE64,
+
+ /**
+ * 16进制编码
+ */
+ HEX;
+
+}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java
index dc19ce2c7..e32843a44 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java
@@ -1,7 +1,9 @@
package com.ruoyi.demo.domain;
import com.baomidou.mybatisplus.annotation.*;
+import com.ruoyi.common.annotation.EncryptField;
import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.enums.AlgorithmType;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -44,11 +46,15 @@ public class TestDemo extends BaseEntity {
/**
* key键
*/
+// @EncryptField(algorithm=AlgorithmType.SM2, privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgZSlOvw8FBiH+aFJWLYZP/VRjg9wjfRarTkGBZd/T3N+gCgYIKoEcz1UBgi2hRANCAAR5DGuQwJqkxnbCsP+iPSDoHWIF4RwcR5EsSvT8QPxO1wRkR2IhCkzvRb32x2CUgJFdvoqVqfApFDPZzShqzBwX", publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEeQxrkMCapMZ2wrD/oj0g6B1iBeEcHEeRLEr0/ED8TtcEZEdiIQpM70W99sdglICRXb6KlanwKRQz2c0oaswcFw==")
+ @EncryptField(algorithm = AlgorithmType.RSA, privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBANBBEeueWlXlkkj2+WY5l+IWe42d8b5K28g+G/CFKC/yYAEHtqGlCsBOrb+YBkG9mPzmuYA/n9k0NFIc8E8yY5vZQaroyFBrTTWEzG9RY2f7Y3svVyybs6jpXSUs4xff8abo7wL1Y/wUaeatTViamxYnyTvdTmLm3d+JjRij68rxAgMBAAECgYAB0TnhXraSopwIVRfmboea1b0upl+BUdTJcmci412UjrKr5aE695ZLPkXbFXijVu7HJlyyv94NVUdaMACV7Ku/S2RuNB70M7YJm8rAjHFC3/i2ZeIM60h1Ziy4QKv0XM3pRATlDCDNhC1WUrtQCQSgU8kcp6eUUppruOqDzcY04QJBAPm9+sBP9CwDRgy3e5+V8aZtJkwDstb0lVVV/KY890cydVxiCwvX3fqVnxKMlb+x0YtH0sb9v+71xvK2lGobaRECQQDVePU6r/cCEfpc+nkWF6osAH1f8Mux3rYv2DoBGvaPzV2BGfsLed4neRfCwWNCKvGPCdW+L0xMJg8+RwaoBUPhAkAT5kViqXxFPYWJYd1h2+rDXhMdH3ZSlm6HvDBDdrwlWinr0Iwcx3iSjPV93uHXwm118aUj4fg3LDJMCKxOwBxhAkByrQXfvwOMYygBprRBf/j0plazoWFrbd6lGR0f1uI5IfNnFRPdeFw1DEINZ2Hw+6zEUF44SqRMC+4IYJNc02dBAkBCgy7RvfyV/A7N6kKXxTHauY0v6XwSSvpeKtRJkbIcRWOdIYvaHO9L7cklj3vIEdwjSUp9K4VTBYYlmAz1xh03", publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQQRHrnlpV5ZJI9vlmOZfiFnuNnfG+StvIPhvwhSgv8mABB7ahpQrATq2/mAZBvZj85rmAP5/ZNDRSHPBPMmOb2UGq6MhQa001hMxvUWNn+2N7L1csm7Oo6V0lLOMX3/Gm6O8C9WP8FGnmrU1YmpsWJ8k73U5i5t3fiY0Yo+vK8QIDAQAB")
private String testKey;
/**
* 值
*/
+ //@EncryptField(algorithm = AlgorithmType.SM4, password = "10rfylhtccpuyke5")
+ @EncryptField(algorithm = AlgorithmType.AES, password = "10rfylhtccpuyke5")
private String value;
/**
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/EncryptorConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/EncryptorConfig.java
new file mode 100644
index 000000000..7d5d21a76
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/EncryptorConfig.java
@@ -0,0 +1,37 @@
+package com.ruoyi.framework.config;
+
+import com.ruoyi.framework.config.properties.EncryptorProperties;
+import com.ruoyi.framework.encrypt.EncryptorManager;
+import com.ruoyi.framework.encrypt.MybatisDecryptInterceptor;
+import com.ruoyi.framework.encrypt.MybatisEncryptInterceptor;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 加解密配置
+ *
+ * @author 老马
+ * @date 2023-01-11 10:03
+ */
+@Configuration
+@ConditionalOnProperty(value = "mybatis-encryptor.enabled", havingValue = "true")
+public class EncryptorConfig {
+
+ @Bean
+ public EncryptorManager mybatisCryptHandler(EncryptorProperties properties) {
+ EncryptorManager encryptorManager = new EncryptorManager();
+ encryptorManager.registAndGetEncryptor(properties);
+ return encryptorManager;
+ }
+
+ @Bean
+ public MybatisEncryptInterceptor mybatisEncryptInterceptor(EncryptorProperties properties) {
+ return new MybatisEncryptInterceptor();
+ }
+
+ @Bean
+ public MybatisDecryptInterceptor mybatisDecryptInterceptor(EncryptorProperties properties) {
+ return new MybatisDecryptInterceptor();
+ }
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/EncryptorProperties.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/EncryptorProperties.java
new file mode 100644
index 000000000..d34949d37
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/EncryptorProperties.java
@@ -0,0 +1,49 @@
+package com.ruoyi.framework.config.properties;
+
+import com.ruoyi.common.enums.AlgorithmType;
+import com.ruoyi.common.enums.EncodeType;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 加解密属性配置类
+ *
+ * @author 老马
+ * @date 2023-01-10 16:52
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "mybatis-encryptor")
+public class EncryptorProperties {
+
+ /**
+ * 过滤开关
+ */
+ private Boolean enabled;
+
+ /**
+ * 默认算法
+ */
+ private AlgorithmType algorithm;
+
+ /**
+ * 安全秘钥
+ */
+ private String password;
+
+ /**
+ * 公钥
+ */
+ private String publicKey;
+
+ /**
+ * 私钥
+ */
+ private String privateKey;
+
+ /**
+ * 编码方式,base64/hex
+ */
+ private EncodeType encode;
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptedFieldsCache.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptedFieldsCache.java
new file mode 100644
index 000000000..e9d2a68ab
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptedFieldsCache.java
@@ -0,0 +1,33 @@
+package com.ruoyi.framework.encrypt;
+
+import com.ruoyi.common.annotation.EncryptField;
+
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
+/**
+ * 类加密字段缓存类
+ *
+ * @author 老马
+ * @date 2023-01-12 11:07
+ */
+public class EncryptedFieldsCache {
+ private static final Map, Set> ENCRYPTED_FIELD_CACHE = new ConcurrentHashMap<>();
+
+ public static Set get(Class> sourceClazz) {
+ return ENCRYPTED_FIELD_CACHE.computeIfAbsent(sourceClazz, clazz -> {
+ Field[] declaredFields = clazz.getDeclaredFields();
+ Set fieldSet = Arrays.stream(declaredFields).filter(field ->
+ field.isAnnotationPresent(EncryptField.class) && field.getType() == String.class)
+ .collect(Collectors.toSet());
+ for (Field field : fieldSet) {
+ field.setAccessible(true);
+ }
+ return fieldSet;
+ });
+ }
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptorManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptorManager.java
new file mode 100644
index 000000000..d929cc2cd
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/EncryptorManager.java
@@ -0,0 +1,120 @@
+package com.ruoyi.framework.encrypt;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.ReflectUtil;
+import com.ruoyi.common.encrypt.EncryptContext;
+import com.ruoyi.common.encrypt.IEncryptor;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.config.properties.EncryptorProperties;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 加密管理类
+ *
+ * @author 老马
+ * @date 2023-01-11 10:07
+ */
+@Slf4j
+public class EncryptorManager {
+
+ /**
+ * 缓存加密器
+ */
+ Map encryptorMap = new ConcurrentHashMap<>();
+
+
+ /**
+ * 注册加密执行者到缓存
+ *
+ * @param properties 加密执行者需要的相关配置参数
+ * @author 老马
+ * @date 2023/1/11 15:09
+ */
+ public IEncryptor registAndGetEncryptor(EncryptorProperties properties) {
+ String encryptorKey = this.getEncryptorKeyFromProperties(properties);
+ if (encryptorMap.containsKey(encryptorKey)) {
+ return encryptorMap.get(encryptorKey);
+ }
+ EncryptContext encryptContext = new EncryptContext();
+ encryptContext.setPassword(properties.getPassword());
+ encryptContext.setPrivateKey(properties.getPrivateKey());
+ encryptContext.setPublicKey(properties.getPublicKey());
+ encryptContext.setEncode(properties.getEncode());
+ IEncryptor encryptor = ReflectUtil.newInstance(properties.getAlgorithm().getClazz(), encryptContext);
+ encryptorMap.put(encryptorKey, encryptor);
+ return encryptorMap.get(encryptorKey);
+ }
+
+ /**
+ * 移除缓存中的加密执行者
+ *
+ * @param properties 加密执行者需要的相关配置参数
+ * @author 老马
+ * @date 2023/1/11 15:55
+ */
+ public void removeEncryptor(EncryptorProperties properties) {
+ this.encryptorMap.remove(getEncryptorKeyFromProperties(properties));
+ }
+
+ /**
+ * 根据配置进行加密。会进行本地缓存对应的算法和对应的秘钥信息。
+ *
+ * @param value 待加密的值
+ * @param properties 加密相关的配置信息
+ * @return java.lang.String 加密后的结果
+ * @author 老马
+ * @date 2023/1/11 16:46
+ */
+ public String encrypt(String value, EncryptorProperties properties) {
+ try {
+ IEncryptor encryptor = this.registAndGetEncryptor(properties);
+ if(ObjectUtil.isNull(encryptor)){
+ return value;
+ }
+ return encryptor.encrypt(value, properties.getEncode());
+ } catch (Exception e) {
+ log.error("字段加密异常,原样返回", e);
+ return value;
+ }
+ }
+
+ /**
+ * 根据配置进行解密
+ *
+ * @param value 待解密的值
+ * @param properties 加密相关的配置信息
+ * @return java.lang.String
+ * @author 老马
+ * @date 2023/1/11 17:43
+ */
+ public String decrypt(String value, EncryptorProperties properties) {
+ try {
+ IEncryptor encryptor = this.registAndGetEncryptor(properties);
+ if(ObjectUtil.isNull(encryptor)){
+ return value;
+ }
+ return encryptor.decrypt(value, properties.getEncode());
+ } catch (Exception e) {
+ log.error("字段解密异常,原样返回", e);
+ return value;
+ }
+ }
+
+
+ /**
+ * 从配置内容中提取缓存的KEY
+ *
+ * @param properties 加密相关的配置信息
+ * @return java.lang.String
+ * @author 老马
+ * @date 2023/1/11 17:39
+ */
+ private String getEncryptorKeyFromProperties(EncryptorProperties properties) {
+ return properties.getAlgorithm() + StringUtils.defaultString(properties.getPassword()) +
+ StringUtils.defaultString(properties.getPublicKey()) + StringUtils.defaultString(properties.getPrivateKey());
+ }
+
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisDecryptInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisDecryptInterceptor.java
new file mode 100644
index 000000000..1cdb58e1f
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisDecryptInterceptor.java
@@ -0,0 +1,105 @@
+package com.ruoyi.framework.encrypt;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.ruoyi.common.annotation.EncryptField;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.framework.config.properties.EncryptorProperties;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.executor.resultset.ResultSetHandler;
+import org.apache.ibatis.plugin.*;
+
+import java.lang.reflect.Field;
+import java.sql.Statement;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+/**
+ * 出参解密拦截器
+ *
+ * @author 老马
+ * @date 2023-01-12 13:47
+ */
+@Slf4j
+@Intercepts({@Signature(
+ type = ResultSetHandler.class,
+ method = "handleResultSets",
+ args = {Statement.class})
+})
+public class MybatisDecryptInterceptor implements Interceptor {
+
+ private final EncryptorManager encryptorManager = SpringUtils.getBean(EncryptorManager.class);
+ private final EncryptorProperties defaultProperties = SpringUtils.getBean(EncryptorProperties.class);
+
+ @Override
+ public Object intercept(Invocation invocation) throws Throwable {
+ // 获取执行mysql执行结果
+ Object result = invocation.proceed();
+ if (result == null) {
+ return null;
+ }
+ decryptHandler(result);
+ return result;
+ }
+
+ /**
+ * 解密对象
+ *
+ * @param sourceObject 待加密对象
+ */
+ private void decryptHandler(Object sourceObject) {
+ if (sourceObject instanceof Map) {
+ ((Map, Object>) sourceObject).values().forEach(this::decryptHandler);
+ return;
+ }
+ if (sourceObject instanceof List) {
+ // 判断第一个元素是否含有注解。如果没有直接返回,提高效率
+ Object firstItem = ((List>) sourceObject).get(0);
+ if (CollectionUtil.isEmpty(EncryptedFieldsCache.get(firstItem.getClass()))) {
+ return;
+ }
+ ((List>) sourceObject).forEach(this::decryptHandler);
+ return;
+ }
+ Set fields = EncryptedFieldsCache.get(sourceObject.getClass());
+ try {
+ for (Field field : fields) {
+ field.set(sourceObject, this.decryptField(String.valueOf(field.get(sourceObject)), field));
+ }
+ } catch (Exception e) {
+ log.error("处理解密字段时出错", e);
+ }
+ }
+
+ /**
+ * 字段值进行加密。通过字段的批注注册新的加密算法
+ *
+ * @param value 待加密的值
+ * @param field 待加密字段
+ * @return 加密后结果
+ */
+ private String decryptField(String value, Field field) {
+ EncryptField encryptField = field.getAnnotation(EncryptField.class);
+ EncryptorProperties properties = new EncryptorProperties();
+ properties.setEnabled(true);
+ properties.setAlgorithm(encryptField.algorithm());
+ properties.setEncode(encryptField.encode());
+ properties.setPassword(StringUtils.isEmpty(encryptField.password()) ? defaultProperties.getPassword() : encryptField.password());
+ properties.setPrivateKey(StringUtils.isEmpty(encryptField.privateKey()) ? defaultProperties.getPrivateKey() : encryptField.privateKey());
+ properties.setPublicKey(StringUtils.isEmpty(encryptField.publicKey()) ? defaultProperties.getPublicKey() : encryptField.publicKey());
+ this.encryptorManager.registAndGetEncryptor(properties);
+ return this.encryptorManager.decrypt(value, properties);
+ }
+
+ @Override
+ public Object plugin(Object target) {
+ return Plugin.wrap(target, this);
+ }
+
+ @Override
+ public void setProperties(Properties properties) {
+
+ }
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisEncryptInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisEncryptInterceptor.java
new file mode 100644
index 000000000..4fd5289e0
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisEncryptInterceptor.java
@@ -0,0 +1,111 @@
+package com.ruoyi.framework.encrypt;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.ruoyi.common.annotation.EncryptField;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.framework.config.properties.EncryptorProperties;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.executor.parameter.ParameterHandler;
+import org.apache.ibatis.plugin.Interceptor;
+import org.apache.ibatis.plugin.Intercepts;
+import org.apache.ibatis.plugin.Invocation;
+import org.apache.ibatis.plugin.Signature;
+
+import java.lang.reflect.Field;
+import java.sql.PreparedStatement;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+/**
+ * 入参加密拦截器
+ *
+ * @author 老马
+ * @date 2023-01-10 16:42
+ */
+@Slf4j
+@Intercepts({@Signature(
+ type = ParameterHandler.class,
+ method = "setParameters",
+ args = {PreparedStatement.class})
+})
+public class MybatisEncryptInterceptor implements Interceptor {
+
+ private final EncryptorManager encryptorManager = SpringUtils.getBean(EncryptorManager.class);
+ private final EncryptorProperties defaultProperties = SpringUtils.getBean(EncryptorProperties.class);
+
+ @Override
+ public Object intercept(Invocation invocation) throws Throwable {
+ return invocation;
+ }
+
+ @Override
+ public Object plugin(Object target) {
+ if (target instanceof ParameterHandler) {
+ // 进行加密操作
+ ParameterHandler parameterHandler = (ParameterHandler) target;
+ Object parameterObject = parameterHandler.getParameterObject();
+ if (ObjectUtil.isNotNull(parameterObject) && !(parameterObject instanceof String)) {
+ this.encryptHandler(parameterObject);
+ }
+ }
+ return target;
+ }
+
+ /**
+ * 加密对象
+ *
+ * @param sourceObject 待加密对象
+ */
+ private void encryptHandler(Object sourceObject) {
+ if (sourceObject instanceof Map) {
+ ((Map, Object>) sourceObject).values().forEach(this::encryptHandler);
+ return;
+ }
+ if (sourceObject instanceof List) {
+ // 判断第一个元素是否含有注解。如果没有直接返回,提高效率
+ Object firstItem = ((List>) sourceObject).get(0);
+ if (CollectionUtil.isEmpty(EncryptedFieldsCache.get(firstItem.getClass()))) {
+ return;
+ }
+ ((List>) sourceObject).forEach(this::encryptHandler);
+ return;
+ }
+ Set fields = EncryptedFieldsCache.get(sourceObject.getClass());
+ try {
+ for (Field field : fields) {
+ field.set(sourceObject, this.encryptField(String.valueOf(field.get(sourceObject)), field));
+ }
+ } catch (Exception e) {
+ log.error("处理加密字段时出错", e);
+ }
+ }
+
+ /**
+ * 字段值进行加密。通过字段的批注注册新的加密算法
+ *
+ * @param value 待加密的值
+ * @param field 待加密字段
+ * @return 加密后结果
+ */
+ private String encryptField(String value, Field field) {
+ EncryptField encryptField = field.getAnnotation(EncryptField.class);
+ EncryptorProperties properties = new EncryptorProperties();
+ properties.setEnabled(true);
+ properties.setAlgorithm(encryptField.algorithm());
+ properties.setEncode(encryptField.encode());
+ properties.setPassword(StringUtils.isEmpty(encryptField.password()) ? defaultProperties.getPassword() : encryptField.password());
+ properties.setPrivateKey(StringUtils.isEmpty(encryptField.privateKey()) ? defaultProperties.getPrivateKey() : encryptField.privateKey());
+ properties.setPublicKey(StringUtils.isEmpty(encryptField.publicKey()) ? defaultProperties.getPublicKey() : encryptField.publicKey());
+ this.encryptorManager.registAndGetEncryptor(properties);
+ return this.encryptorManager.encrypt(value, properties);
+ }
+
+
+ @Override
+ public void setProperties(Properties properties) {
+ }
+}