From c9260c49660137967a8f44485979829b9b0be38b 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: Mon, 7 Feb 2022 15:13:15 +0000
Subject: [PATCH 01/15] update README.md.
---
README.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/README.md b/README.md
index 353e087fc..896d6c3ac 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,8 @@
+# 此分支进入维护阶段
+> 不进行更新 只修复bug 持续维护到2022年10月
+> 推荐使用 4.X 版本
+> 主分支与Sa-Token分支合并
+
## 平台简介
[](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus)
[](https://github.com/JavaLionLi/RuoYi-Vue-Plus)
From 82e8ab2385b8d0b5c4f11cbdcee42178896fe61f 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: Fri, 18 Feb 2022 10:39:53 +0800
Subject: [PATCH 02/15] =?UTF-8?q?add=20=E5=A2=9E=E5=8A=A0=E9=A1=B5?=
=?UTF-8?q?=E9=9D=A2=E6=9B=B4=E6=96=B0=E8=AF=B4=E6=98=8E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 5 -----
1 file changed, 5 deletions(-)
diff --git a/README.md b/README.md
index 896d6c3ac..353e087fc 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,3 @@
-# 此分支进入维护阶段
-> 不进行更新 只修复bug 持续维护到2022年10月
-> 推荐使用 4.X 版本
-> 主分支与Sa-Token分支合并
-
## 平台简介
[](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus)
[](https://github.com/JavaLionLi/RuoYi-Vue-Plus)
From f3a4104fd061a8895fa5c44e6d9260b718d6311a 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: Fri, 18 Feb 2022 14:05:32 +0800
Subject: [PATCH 03/15] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20minio=20?=
=?UTF-8?q?=E9=80=82=E9=85=8D=20https=20=E5=AF=BC=E8=87=B4=E7=9A=84?=
=?UTF-8?q?=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ruoyi/oss/service/impl/MinioOssStrategy.java | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java
index eb2e77042..93f88fb3a 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java
@@ -9,6 +9,8 @@ import com.ruoyi.oss.exception.OssException;
import com.ruoyi.oss.properties.OssProperties;
import com.ruoyi.oss.service.abstractd.AbstractOssStrategy;
import io.minio.*;
+import io.minio.http.HttpUtils;
+import okhttp3.HttpUrl;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
@@ -29,10 +31,15 @@ public class MinioOssStrategy extends AbstractOssStrategy {
public void init(OssProperties ossProperties) {
super.init(ossProperties);
try {
- minioClient = MinioClient.builder()
- .endpoint(properties.getEndpoint(), 443, OssConstant.IS_HTTPS.equals(ossProperties.getIsHttps()))
- .credentials(properties.getAccessKey(), properties.getSecretKey())
- .build();
+ MinioClient.Builder builder = MinioClient.builder();
+ if (OssConstant.IS_HTTPS.equals(ossProperties.getIsHttps())) {
+ HttpUrl url = HttpUtils.getBaseUrl(properties.getEndpoint())
+ .newBuilder().scheme("https").build();
+ builder.endpoint(url);
+ } else {
+ builder.endpoint(properties.getEndpoint());
+ }
+ minioClient = builder.credentials(properties.getAccessKey(), properties.getSecretKey()).build();
createBucket();
} catch (Exception e) {
throw new OssException("Minio存储配置错误! 请检查系统配置:[" + e.getMessage() + "]");
From 329c070e058b05e014c4f2d226098949e6df0a0d 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: Fri, 18 Feb 2022 16:20:58 +0000
Subject: [PATCH 04/15] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=20=E5=A4=9A?=
=?UTF-8?q?=E7=94=A8=E6=88=B7=E5=A4=9A=E8=AE=BE=E5=A4=87=E7=9A=84=E6=B3=A8?=
=?UTF-8?q?=E9=87=8A=E8=AF=B4=E6=98=8E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/ruoyi/common/helper/LoginHelper.java | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java b/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java
index a15220859..cd0d25cfd 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java
@@ -12,7 +12,13 @@ import lombok.NoArgsConstructor;
/**
* 登录鉴权助手
- * 为适配多端登录而封装
+ *
+ * user_type 为 用户类型 同一个用户表 可以有多种用户类型 例如 pc,app
+ * deivce 为 设备类型 同一个用户类型 可以有 多种设备类型 例如 web,ios
+ * 可以组成 用户类型与设备类型多对多的 权限灵活控制
+ *
+ * 多用户体系 针对 多种用户类型 但权限控制不一致
+ * 可以组成 多用户类型表与多设备类型 分别控制权限
*
* @author Lion Li
*/
@@ -26,7 +32,6 @@ public class LoginHelper {
/**
* 登录系统
- * 针对两套用户体系
*
* @param loginUser 登录用户信息
*/
@@ -38,7 +43,7 @@ public class LoginHelper {
/**
* 登录系统 基于 设备类型
- * 针对一套用户体系
+ * 针对相同用户体系不同设备
*
* @param loginUser 登录用户信息
*/
From 95a2c74462a6d8b607bc3a060149be4b420262ad 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, 3 Mar 2022 14:34:13 +0800
Subject: [PATCH 05/15] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E6=95=B0?=
=?UTF-8?q?=E6=8D=AE=E6=9D=83=E9=99=90=20=E4=BB=8E=20aop=20=E5=88=87?=
=?UTF-8?q?=E6=8D=A2=E5=88=B0=20=E6=8B=A6=E6=88=AA=E5=99=A8=20=E5=AF=BC?=
=?UTF-8?q?=E8=87=B4=E8=8E=B7=E5=8F=96=E4=BB=A3=E7=90=86=E5=A4=B1=E8=B4=A5?=
=?UTF-8?q?=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/ruoyi/system/service/impl/SysDeptServiceImpl.java | 3 +--
.../com/ruoyi/system/service/impl/SysRoleServiceImpl.java | 5 ++---
.../com/ruoyi/system/service/impl/SysUserServiceImpl.java | 3 +--
3 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
index 5cd3fe0e6..6b13f0b19 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -14,7 +14,6 @@ import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.TreeBuildUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysUserMapper;
@@ -155,7 +154,7 @@ public class SysDeptServiceImpl implements ISysDeptService {
if (!LoginHelper.isAdmin()) {
SysDept dept = new SysDept();
dept.setDeptId(deptId);
- List depts = SpringUtils.getAopProxy(this).selectDeptList(dept);
+ List depts = this.selectDeptList(dept);
if (CollUtil.isEmpty(depts)) {
throw new ServiceException("没有权限访问部门数据!");
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
index 81334892f..19f3211f5 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -10,7 +10,6 @@ import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
-import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.SysRoleDept;
import com.ruoyi.system.domain.SysRoleMenu;
import com.ruoyi.system.domain.SysUserRole;
@@ -102,7 +101,7 @@ public class SysRoleServiceImpl implements ISysRoleService {
*/
@Override
public List selectRoleAll() {
- return SpringUtils.getAopProxy(this).selectRoleList(new SysRole());
+ return this.selectRoleList(new SysRole());
}
/**
@@ -183,7 +182,7 @@ public class SysRoleServiceImpl implements ISysRoleService {
if (!LoginHelper.isAdmin()) {
SysRole role = new SysRole();
role.setRoleId(roleId);
- List roles = SpringUtils.getAopProxy(this).selectRoleList(role);
+ List roles = this.selectRoleList(role);
if (CollUtil.isEmpty(roles)) {
throw new ServiceException("没有权限访问角色数据!");
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index c3ff6f409..6ec437b97 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -13,7 +13,6 @@ import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.domain.SysUserPost;
import com.ruoyi.system.domain.SysUserRole;
@@ -209,7 +208,7 @@ public class SysUserServiceImpl implements ISysUserService {
if (!LoginHelper.isAdmin()) {
SysUser user = new SysUser();
user.setUserId(userId);
- List users = SpringUtils.getAopProxy(this).selectUserList(user);
+ List users = this.selectUserList(user);
if (CollUtil.isEmpty(users)) {
throw new ServiceException("没有权限访问用户数据!");
}
From bf362b9aba9335aa776e51037ecb6a10ed18efb8 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, 28 Jun 2022 13:15:20 +0800
Subject: [PATCH 06/15] =?UTF-8?q?update=20=E6=9B=B4=E6=94=B9=20readme=20?=
=?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index b7f5d60b0..d2e514751 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)
[]()
[]()
[]()
From 23cbed3aac9fb85c4b810f1a1603678b285debdd 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, 29 Jun 2022 15:25:40 +0800
Subject: [PATCH 07/15] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E6=9B=B4?=
=?UTF-8?q?=E6=AD=A3=E9=94=99=E8=AF=AF=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
script/docker/nginx/nginx.conf | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/script/docker/nginx/nginx.conf b/script/docker/nginx/nginx.conf
index daa2acf49..014b10e7d 100644
--- a/script/docker/nginx/nginx.conf
+++ b/script/docker/nginx/nginx.conf
@@ -23,16 +23,16 @@ http {
upstream server {
ip_hash;
- server 127.0.0.1:8080;
- server 127.0.0.1:8080;
+ server 172.31.0.60:8080;
+ server 172.31.0.61:8080;
}
upstream monitor-admin {
- server 127.0.0.1:9090;
+ server 172.31.0.90:9090;
}
upstream xxljob-admin {
- server 127.0.0.1:9100;
+ server 172.31.0.92:9100;
}
server {
From b2a927cc5ee9a1676b8fb953e779b202d459bfd0 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, 29 Jun 2022 15:28:24 +0800
Subject: [PATCH 08/15] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E6=9B=B4?=
=?UTF-8?q?=E6=AD=A3=E9=94=99=E8=AF=AF=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
script/docker/nginx/nginx.conf | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/script/docker/nginx/nginx.conf b/script/docker/nginx/nginx.conf
index 014b10e7d..ecf71955f 100644
--- a/script/docker/nginx/nginx.conf
+++ b/script/docker/nginx/nginx.conf
@@ -23,16 +23,16 @@ http {
upstream server {
ip_hash;
- server 172.31.0.60:8080;
- server 172.31.0.61:8080;
+ server 172.30.0.60:8080;
+ server 172.30.0.61:8080;
}
upstream monitor-admin {
- server 172.31.0.90:9090;
+ server 172.30.0.90:9090;
}
upstream xxljob-admin {
- server 172.31.0.92:9100;
+ server 172.30.0.92:9100;
}
server {
From 5c9fe22780306f4bf68e1f4a35e079745a00ea6c Mon Sep 17 00:00:00 2001
From: JaneYork
Date: Mon, 18 Jul 2022 03:46:13 +0000
Subject: [PATCH 09/15] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9AOSS=E8=87=AA?=
=?UTF-8?q?=E5=AE=9A=E4=B9=89=E5=9F=9F=E5=90=8D=E6=8B=BC=E6=8E=A5=E9=97=AE?=
=?UTF-8?q?=E9=A2=98=EF=BC=8C=E6=97=A0=E9=9C=80=E9=85=8D=E7=BD=AEHTTP?=
=?UTF-8?q?=E7=AD=89=E5=89=8D=E7=BC=80=20=E4=BF=AE=E5=A4=8D=EF=BC=9AOSS?=
=?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=9F=9F=E5=90=8D=E6=8B=BC=E6=8E=A5?=
=?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E6=97=A0=E9=9C=80=E9=85=8D=E7=BD=AE?=
=?UTF-8?q?HTTP=E3=80=81HTTPS=E7=AD=89=E5=89=8D=E7=BC=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java
index 6f6be8f8c..4f1c7ca88 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java
@@ -119,12 +119,12 @@ public class OssClient {
}
public String getUrl() {
+ String header = OssConstant.IS_HTTPS.equals(properties.getIsHttps()) ? "https://" : "http://";
String domain = properties.getDomain();
if (StringUtils.isNotBlank(domain)) {
- return domain;
+ return header + domain;
}
String endpoint = properties.getEndpoint();
- String header = OssConstant.IS_HTTPS.equals(properties.getIsHttps()) ? "https://" : "http://";
// 云服务商直接返回
if (StringUtils.containsAny(endpoint, OssConstant.CLOUD_SERVICE)){
return header + properties.getBucketName() + "." + endpoint;
From 6f83ed328540a32ec300750ba5a5e56d1d1a4d93 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: Mon, 18 Jul 2022 11:55:52 +0800
Subject: [PATCH 10/15] =?UTF-8?q?reset=20=E5=9B=9E=E6=BB=9A=E9=94=99?=
=?UTF-8?q?=E8=AF=AF=E5=90=88=E5=B9=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java
index 4f1c7ca88..6f6be8f8c 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java
@@ -119,12 +119,12 @@ public class OssClient {
}
public String getUrl() {
- String header = OssConstant.IS_HTTPS.equals(properties.getIsHttps()) ? "https://" : "http://";
String domain = properties.getDomain();
if (StringUtils.isNotBlank(domain)) {
- return header + domain;
+ return domain;
}
String endpoint = properties.getEndpoint();
+ String header = OssConstant.IS_HTTPS.equals(properties.getIsHttps()) ? "https://" : "http://";
// 云服务商直接返回
if (StringUtils.containsAny(endpoint, OssConstant.CLOUD_SERVICE)){
return header + properties.getBucketName() + "." + endpoint;
From 138842e9ba140431d902dfbeee42ae0877a68c12 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: Mon, 8 Aug 2022 18:20:29 +0800
Subject: [PATCH 11/15] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E7=94=A8?=
=?UTF-8?q?=E6=88=B7=E7=99=BB=E5=BD=95=E4=B8=8E=E7=9F=AD=E4=BF=A1=E7=99=BB?=
=?UTF-8?q?=E5=BD=95=20=E5=9B=BD=E9=99=85=E5=8C=96=E6=A0=BC=E5=BC=8F?=
=?UTF-8?q?=E4=B8=8D=E4=B8=80=E8=87=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-admin/src/main/resources/i18n/messages.properties | 2 +-
ruoyi-admin/src/main/resources/i18n/messages_en_US.properties | 2 +-
ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties | 2 +-
.../main/java/com/ruoyi/system/service/SysLoginService.java | 4 +---
4 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/ruoyi-admin/src/main/resources/i18n/messages.properties b/ruoyi-admin/src/main/resources/i18n/messages.properties
index 7ddd6cd92..1645af347 100644
--- a/ruoyi-admin/src/main/resources/i18n/messages.properties
+++ b/ruoyi-admin/src/main/resources/i18n/messages.properties
@@ -41,5 +41,5 @@ repeat.submit.message=\u4E0D\u5141\u8BB8\u91CD\u590D\u63D0\u4EA4\uFF0C\u8BF7\u7A
rate.limiter.message=\u8BBF\u95EE\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u5019\u518D\u8BD5
sms.code.not.blank=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u4E0D\u80FD\u4E3A\u7A7A
sms.code.retry.limit.count=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21
-sms.code.retry.limit.exceed=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u9519\u8BEF\u6B21\u6570\u8FC7\u591A\uFF0C\u5E10\u6237\u9501\u5B9A{0}\u5206\u949F
+sms.code.retry.limit.exceed=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{0}\u5206\u949F
xcx.code.not.blank=\u5C0F\u7A0B\u5E8Fcode\u4E0D\u80FD\u4E3A\u7A7A
diff --git a/ruoyi-admin/src/main/resources/i18n/messages_en_US.properties b/ruoyi-admin/src/main/resources/i18n/messages_en_US.properties
index 7aae8ced3..92d8185d3 100644
--- a/ruoyi-admin/src/main/resources/i18n/messages_en_US.properties
+++ b/ruoyi-admin/src/main/resources/i18n/messages_en_US.properties
@@ -41,5 +41,5 @@ repeat.submit.message=Repeat submit is not allowed, please try again later
rate.limiter.message=Visit too frequently, please try again later
sms.code.not.blank=Sms code cannot be blank
sms.code.retry.limit.count=Sms code input error {0} times
-sms.code.retry.limit.exceed=Too many sms code errors, account locked for {0} minutes
+sms.code.retry.limit.exceed=Sms code input error {0} times, account locked for {0} minutes
xcx.code.not.blank=Mini program code cannot be blank
diff --git a/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties b/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties
index 7ddd6cd92..1645af347 100644
--- a/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties
+++ b/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties
@@ -41,5 +41,5 @@ repeat.submit.message=\u4E0D\u5141\u8BB8\u91CD\u590D\u63D0\u4EA4\uFF0C\u8BF7\u7A
rate.limiter.message=\u8BBF\u95EE\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u5019\u518D\u8BD5
sms.code.not.blank=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u4E0D\u80FD\u4E3A\u7A7A
sms.code.retry.limit.count=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21
-sms.code.retry.limit.exceed=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u9519\u8BEF\u6B21\u6570\u8FC7\u591A\uFF0C\u5E10\u6237\u9501\u5B9A{0}\u5206\u949F
+sms.code.retry.limit.exceed=\u77ED\u4FE1\u9A8C\u8BC1\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{0}\u5206\u949F
xcx.code.not.blank=\u5C0F\u7A0B\u5E8Fcode\u4E0D\u80FD\u4E3A\u7A7A
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java
index bf5413172..ea53635e7 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java
@@ -15,9 +15,7 @@ import com.ruoyi.common.core.service.LogininforService;
import com.ruoyi.common.enums.DeviceType;
import com.ruoyi.common.enums.LoginType;
import com.ruoyi.common.enums.UserStatus;
-import com.ruoyi.common.exception.user.CaptchaException;
-import com.ruoyi.common.exception.user.CaptchaExpireException;
-import com.ruoyi.common.exception.user.UserException;
+import com.ruoyi.common.exception.user.*;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.MessageUtils;
From 4e807455e062c1d4574e91c231278497e953cb43 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9E=95=E6=A2=A6=E8=AE=B0?= <545073804@qq.com>
Date: Tue, 13 Sep 2022 08:19:19 +0000
Subject: [PATCH 12/15] =?UTF-8?q?update=20=E7=BC=A9=E8=BF=9B=E9=85=8D?=
=?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6.editorconfig=E6=B7=BB=E5=8A=A0.yaml?=
=?UTF-8?q?=E6=96=87=E4=BB=B6=E6=A0=BC=E5=BC=8F=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: 枕梦记 <545073804@qq.com>
---
.editorconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.editorconfig b/.editorconfig
index 672defc11..25b312ef3 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -10,7 +10,7 @@ end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
-[*.{json,yml}]
+[*.{json,yml,yaml}]
indent_size = 2
[*.md]
From e4fff795b8cbe180708c8b8fcae5b495f3833055 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, 13 Sep 2022 08:20:54 +0000
Subject: [PATCH 13/15] =?UTF-8?q?=E5=9B=9E=E9=80=80=20'Pull=20Request=20!2?=
=?UTF-8?q?30=20:=20=E3=80=90=E8=BD=BB=E9=87=8F=E7=BA=A7=20PR=E3=80=91?=
=?UTF-8?q?=EF=BC=9Aupdate=20=E7=BC=A9=E8=BF=9B=E9=85=8D=E7=BD=AE=E6=96=87?=
=?UTF-8?q?=E4=BB=B6.editorconfig=E6=B7=BB=E5=8A=A0.yaml=E6=96=87=E4=BB=B6?=
=?UTF-8?q?=E6=A0=BC=E5=BC=8F=E6=94=AF=E6=8C=81'?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.editorconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.editorconfig b/.editorconfig
index 25b312ef3..672defc11 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -10,7 +10,7 @@ end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
-[*.{json,yml,yaml}]
+[*.{json,yml}]
indent_size = 2
[*.md]
From 1496220a74b8193295eb1fab5c324156d959727e 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, 28 Dec 2022 18:53:29 +0800
Subject: [PATCH 14/15] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E6=9B=B4?=
=?UTF-8?q?=E7=BB=86=E8=87=B4=E7=9A=84=20issue=20=E6=8F=90=E9=97=AE?=
=?UTF-8?q?=E6=A8=A1=E6=9D=BF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitee/ISSUE_TEMPLATE.zh-CN.md | 38 ++++++++++++++++++++++++++-
.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md | 2 +-
2 files changed, 38 insertions(+), 2 deletions(-)
diff --git a/.gitee/ISSUE_TEMPLATE.zh-CN.md b/.gitee/ISSUE_TEMPLATE.zh-CN.md
index b6fcbea86..cf82237f3 100644
--- a/.gitee/ISSUE_TEMPLATE.zh-CN.md
+++ b/.gitee/ISSUE_TEMPLATE.zh-CN.md
@@ -1,13 +1,49 @@
### 使用版本(未按照模板填写直接删除)
+- jdk版本(带上尾号): 例如 1.8.0_202
+- 框架版本(项目启动时输出的版本号): 例如 4.4.0
+- 其他依赖版本(你觉得有必要的):
+
+### 问题前提
+
+> 功能不好用 不会用 是否已经看过项目文档
+> 项目运行报错 是否已经拿着报错信息去百度 常见报错百度百度足以
+> 是否搜索过其他issue 一些已经解决的问题 会在issue内留下解决方法
+> 无法线上解决或者与框架无关的问题的欢迎加VIP群跟作者一对一谈
+
+### 异常模块
+
+> 此报错都涉及到那些系统模块
+
+例如 ruoyi-system ruoyi-auth 等等
### 问题描述
+> 越详细越容易直击问题所在
+
+已知: XXX功能不好用 或 XXX数据不正常 等等
### 希望结果
+> 想知道你觉得怎么样是正常或者合理的
+
+希望功能可以有XXX结果 或者 XXX现象
### 重现步骤
+> 作者并不知道这个问题是如何出现的
-### 报错信息(截图为主 请勿发混乱格式)
\ No newline at end of file
+- 1
+- 2
+- 3
+
+### 相关代码与报错信息(请勿发混乱格式)
+
+> 代码可按照如下形式提供或者截图均可 越详细越好
+> 大多数问题都是 代码编写错误问题 逻辑问题 或者用法错误等问题
+
+```java
+public class XXX {
+
+}
+```
\ No newline at end of file
diff --git a/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md b/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md
index f5ef7c154..ef11b85b0 100644
--- a/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md
+++ b/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md
@@ -1,7 +1,7 @@
### 更改目的 解决了什么问题(请提交到dev分支)
-### 描述 做了哪些改动
+### 改动逻辑 这么写的思路(让作者更好的理解你的意图)
### 测试 都做了哪些测试(未经过测试不采纳)
\ No newline at end of file
From ecb6fcc2c5060870633af48a8ef87aff336c73ca Mon Sep 17 00:00:00 2001
From: mayuanfei
Date: Sat, 7 Jan 2023 22:23:37 +0800
Subject: [PATCH 15/15] =?UTF-8?q?=E6=89=A9=E5=B1=95MP=E7=9A=84TypeHandler?=
=?UTF-8?q?=EF=BC=8C=E4=BD=BFdao=E5=B1=82=E5=AE=9E=E7=8E=B0=E5=AF=B9?=
=?UTF-8?q?=E8=A1=A8=E5=AD=97=E6=AE=B5=E7=9A=84=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 | 25 +++-
.../com/ruoyi/common/enums/AlgorithmType.java | 35 +++++
ruoyi-demo/pom.xml | 5 +
.../TestEncryptFieldController.java | 125 ++++++++++++++++++
.../java/com/ruoyi/demo/domain/TestDemo.java | 5 +-
ruoyi-framework/pom.xml | 5 +
.../properties/EncryptFieldProperties.java | 46 +++++++
.../framework/handler/EncryptTypeHandler.java | 48 +++++++
.../framework/manager/EncryptorManager.java | 66 +++++++++
.../manager/encryptor/AesEncryptor.java | 72 ++++++++++
.../manager/encryptor/Base64Encryptor.java | 54 ++++++++
.../manager/encryptor/IEncryptor.java | 42 ++++++
.../manager/encryptor/RsaEncryptor.java | 62 +++++++++
.../manager/encryptor/Sm2Encryptor.java | 62 +++++++++
.../manager/encryptor/Sm4Encryptor.java | 60 +++++++++
16 files changed, 718 insertions(+), 2 deletions(-)
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/AlgorithmType.java
create mode 100644 ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestEncryptFieldController.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/EncryptFieldProperties.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/handler/EncryptTypeHandler.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/manager/EncryptorManager.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/AesEncryptor.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/Base64Encryptor.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/IEncryptor.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/RsaEncryptor.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/Sm2Encryptor.java
create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/Sm4Encryptor.java
diff --git a/pom.xml b/pom.xml
index 3de969cfd..a5450f8a1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,6 +36,7 @@
2.14.2
2.3.1
1.18.24
+ 1.72
31.1-jre
@@ -235,6 +236,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 80f3bf35e..17c131a41 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -176,7 +176,30 @@ mybatis-plus:
updateStrategy: NOT_NULL
# 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件
where-strategy: NOT_NULL
-
+ # 扫描自定义TypeHandler
+ type-handlers-package: com.ruoyi.framework.handler
+ encrypt-field:
+ # 字段加密算法,可自定义算法。目前支持:base64、aes、rsa、sm2、sm4。
+ # 其中base64不需要公钥私钥;ras、sm2需要公私钥信息;
+ # aes采用AES/CBC/PKCS5Padding,需要secretKey和ivKey;
+ # sm4采用SM4/ECB/PKCS5Padding,需要secretKey
+ # encodeType可以指定最终保存的编码格式。可以是hex或base64格式。默认base64
+# algorithm: base64
+# algorithm: 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==
+# encodeType: base64
+# algorithm: sm2
+# publicKey: MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAESU5V56NTde1KYcp63wHEXxUyh2kwEVgVNhlQiqUQMbJJWyIDny7CW2lt71XGmm8sjmSkbGZYMcrM27H2wzp0Gw==
+# privateKey: MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgM6U/o1oR8swRomlNffyqE2tglhuUcWtPEFYrCsvGUa2gCgYIKoEcz1UBgi2hRANCAARJTlXno1N17UphynrfAcRfFTKHaTARWBU2GVCKpRAxsklbIgOfLsJbaW3vVcaabyyOZKRsZlgxyszbsfbDOnQb
+# encodeType: hex
+# algorithm: aes
+# secretKey: "A84DC2F738843E1A4170F053F5025F9A74164FFC158CB245570728CF00731803"
+# ivKey: "00000000000000000000000000000000"
+# encodeType: hex
+ algorithm: sm4
+ secretKey: 6fyk4jdi5yrlrdcv
+ encodeType: base64
# Swagger配置
swagger:
# 是否开启swagger
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..8aaf7f465
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/AlgorithmType.java
@@ -0,0 +1,35 @@
+package com.ruoyi.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 算法名称
+ * @author 老马
+ */
+@Getter
+@AllArgsConstructor
+public enum AlgorithmType {
+ /**
+ * base64
+ */
+ BASE64("base64"),
+ /**
+ * aes
+ */
+ AES("aes"),
+ /**
+ * rsa
+ */
+ RSA("rsa"),
+ /**
+ * sm2
+ */
+ SM2("sm2"),
+ /**
+ * sm4
+ */
+ SM4("sm4");
+
+ private final String algorithm;
+}
diff --git a/ruoyi-demo/pom.xml b/ruoyi-demo/pom.xml
index 46b45981d..352ef9d27 100644
--- a/ruoyi-demo/pom.xml
+++ b/ruoyi-demo/pom.xml
@@ -23,6 +23,11 @@
ruoyi-common
+
+ com.ruoyi
+ ruoyi-framework
+
+
com.ruoyi
ruoyi-sms
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestEncryptFieldController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestEncryptFieldController.java
new file mode 100644
index 000000000..58d59bc93
--- /dev/null
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestEncryptFieldController.java
@@ -0,0 +1,125 @@
+package com.ruoyi.demo.controller;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.demo.domain.TestDemo;
+import com.ruoyi.demo.mapper.TestDemoMapper;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * 测试数据库字段加解密
+ *
+ * @author 老马
+ * @date 2023-01-06 14:48
+ */
+@SaIgnore
+@RestController
+@RequestMapping("/demo/encrypt")
+public class TestEncryptFieldController {
+
+ @Resource
+ private TestDemoMapper demoMapper;
+
+ /**
+ * 配置内容
+ * encrypt-field:
+ algorithm: base64
+ */
+ @GetMapping("/base64")
+ public R base64() {
+ //插入
+ TestDemo testDemo = new TestDemo();
+ testDemo.setTestKey("testkey");
+ testDemo.setValue("testvalue");
+ demoMapper.insert(testDemo);
+ //查询
+ TestDemo testDemo1 = this.demoMapper.selectById(testDemo.getId());
+ return R.ok(testDemo1);
+ }
+
+ /**
+ * 配置内容
+ * encrypt-field:
+ algorithm: aes
+ encodeKey: A84DC2F738843E1A4170F053F5025F9A74164FFC158CB245570728CF00731803
+ ivKey: 00000000000000000000000000000000
+ encodeType: hex
+ */
+ @GetMapping("/aes")
+ public R aes() {
+ //插入
+ TestDemo testDemo = new TestDemo();
+ testDemo.setTestKey("testkey");
+ testDemo.setValue("testvalue");
+ demoMapper.insert(testDemo);
+ //查询
+ TestDemo testDemo1 = this.demoMapper.selectById(testDemo.getId());
+ return R.ok(testDemo1);
+ }
+
+
+ /**
+ * 配置内容
+ * encrypt-field:
+ algorithm: 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==
+ encodeType: base64
+ */
+ @GetMapping("/rsa")
+ public R rsa() {
+ //插入
+ TestDemo testDemo = new TestDemo();
+ testDemo.setTestKey("testkey");
+ testDemo.setValue("testvalue");
+ demoMapper.insert(testDemo);
+ //查询
+ TestDemo testDemo1 = this.demoMapper.selectById(testDemo.getId());
+ return R.ok(testDemo1);
+ }
+
+
+ /**
+ * 配置内容
+ * encrypt-field:
+ algorithm: sm2
+ publicKey: MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAESU5V56NTde1KYcp63wHEXxUyh2kwEVgVNhlQiqUQMbJJWyIDny7CW2lt71XGmm8sjmSkbGZYMcrM27H2wzp0Gw==
+ privateKey: MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgM6U/o1oR8swRomlNffyqE2tglhuUcWtPEFYrCsvGUa2gCgYIKoEcz1UBgi2hRANCAARJTlXno1N17UphynrfAcRfFTKHaTARWBU2GVCKpRAxsklbIgOfLsJbaW3vVcaabyyOZKRsZlgxyszbsfbDOnQb
+ encodeType: base64
+ */
+ @GetMapping("/sm2")
+ public R sm2() {
+ //插入
+ TestDemo testDemo = new TestDemo();
+ testDemo.setTestKey("testkey");
+ testDemo.setValue("testvalue");
+ demoMapper.insert(testDemo);
+ //查询
+ TestDemo testDemo1 = this.demoMapper.selectById(testDemo.getId());
+ return R.ok(testDemo1);
+ }
+
+ /**
+ * 配置内容
+ * encrypt-field:
+ algorithm: sm4
+ encodeKey: 8qwo86o2psmakww2qe2mv0ivk5gru2op
+ encodeType: base64
+ */
+ @GetMapping("/sm4")
+ public R sm4() {
+ //插入
+ TestDemo testDemo = new TestDemo();
+ testDemo.setTestKey("testkey");
+ testDemo.setValue("testvalue");
+ demoMapper.insert(testDemo);
+ //查询
+ TestDemo testDemo1 = this.demoMapper.selectById(testDemo.getId());
+ return R.ok(testDemo1);
+ }
+
+}
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..220bfae2b 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
@@ -2,6 +2,7 @@ package com.ruoyi.demo.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.framework.handler.EncryptTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -13,7 +14,7 @@ import lombok.EqualsAndHashCode;
*/
@Data
@EqualsAndHashCode(callSuper = true)
-@TableName("test_demo")
+@TableName(value="test_demo", autoResultMap=true)
public class TestDemo extends BaseEntity {
private static final long serialVersionUID = 1L;
@@ -44,11 +45,13 @@ public class TestDemo extends BaseEntity {
/**
* key键
*/
+ @TableField(typeHandler = EncryptTypeHandler.class)
private String testKey;
/**
* 值
*/
+ @TableField(typeHandler = EncryptTypeHandler.class)
private String value;
/**
diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml
index 52e1b0651..b89c58160 100644
--- a/ruoyi-framework/pom.xml
+++ b/ruoyi-framework/pom.xml
@@ -61,6 +61,11 @@
transmittable-thread-local
+
+ org.bouncycastle
+ bcprov-jdk15to18
+
+
com.ruoyi
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/EncryptFieldProperties.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/EncryptFieldProperties.java
new file mode 100644
index 000000000..ed9fe8141
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/EncryptFieldProperties.java
@@ -0,0 +1,46 @@
+package com.ruoyi.framework.config.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 加密字段属性配置
+ *
+ * @author 老马
+ * @date 2023-01-06 08:57
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "mybatis-plus.encrypt-field")
+public class EncryptFieldProperties {
+ /**
+ * 算法名称
+ */
+ private String algorithm;
+
+ /**
+ * 字符串的编码方式
+ */
+ private String encodeType;
+
+ /**
+ * 非对称加密算法的公钥
+ */
+ private String publicKey;
+
+ /**
+ * 非对称加密算法的私钥
+ */
+ private String privateKey;
+
+ /**
+ * AES和SM4 的 秘钥
+ */
+ private String secretKey;
+
+ /**
+ * AES 的 ivKey
+ */
+ private String ivKey;
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/EncryptTypeHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/EncryptTypeHandler.java
new file mode 100644
index 000000000..81067ac5b
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/EncryptTypeHandler.java
@@ -0,0 +1,48 @@
+package com.ruoyi.framework.handler;
+
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.framework.config.properties.EncryptFieldProperties;
+import com.ruoyi.framework.manager.EncryptorManager;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.TypeHandler;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ * 加解密字段处理
+ *
+ * @author 老马
+ * @date 2023-01-06 10:46
+ */
+public class EncryptTypeHandler implements TypeHandler {
+
+ /**
+ * 加解密管理者
+ */
+ private final EncryptorManager encryptorManager = SpringUtils.getBean(EncryptorManager.class);
+ private final EncryptFieldProperties properties = SpringUtils.getBean(EncryptFieldProperties.class);
+
+ @Override
+ public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
+ ps.setString(i, encryptorManager.encrypt(parameter, properties));
+ }
+
+
+ @Override
+ public String getResult(ResultSet rs, String columnName) throws SQLException {
+ return encryptorManager.decrypt(rs.getString(columnName), properties);
+ }
+
+ @Override
+ public String getResult(ResultSet rs, int columnIndex) throws SQLException {
+ return encryptorManager.decrypt(rs.getString(columnIndex), properties);
+ }
+
+ @Override
+ public String getResult(CallableStatement cs, int columnIndex) throws SQLException {
+ return encryptorManager.decrypt(cs.getString(columnIndex), properties);
+ }
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/EncryptorManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/EncryptorManager.java
new file mode 100644
index 000000000..ec3a7c442
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/EncryptorManager.java
@@ -0,0 +1,66 @@
+package com.ruoyi.framework.manager;
+
+import com.ruoyi.framework.config.properties.EncryptFieldProperties;
+import com.ruoyi.framework.manager.encryptor.IEncryptor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 加解密管理者
+ *
+ * @author 老马
+ * @date 2023-01-06 09:19
+ */
+@Slf4j
+@Component
+public class EncryptorManager {
+ @Resource
+ private List encryptors;
+
+ /**
+ * 加密
+ * @param value 待加密字符串
+ * @param properties 加解密配置信息
+ * @return 加密后的字符串
+ * @throws Exception 抛出异常
+ */
+ public String encrypt(String value, EncryptFieldProperties properties) {
+ try {
+ for(IEncryptor encryptor : encryptors) {
+ if(encryptor.isMyAlgorithm(properties.getAlgorithm())) {
+ return encryptor.encrypt(value, properties);
+ }
+ }
+ //没有加解密执行者或者算法名找不到时,还是返回原字符串
+ return value;
+ }catch (Exception e) {
+ log.error("字段加密异常,原样返回。异常信息:【{}】", e.getMessage());
+ return value;
+ }
+ }
+
+ /**
+ * 解密
+ * @param value 待解密字符串
+ * @param properties 加解密配置信息
+ * @return 解密后的字符串
+ * @throws Exception 抛出异常
+ */
+ public String decrypt(String value, EncryptFieldProperties properties) {
+ try {
+ for(IEncryptor encryptor : encryptors) {
+ if(encryptor.isMyAlgorithm(properties.getAlgorithm())) {
+ return encryptor.decrypt(value, properties);
+ }
+ }
+ //没有加解密执行者或者算法名找不到时,还是返回原字符串
+ return value;
+ }catch(Exception e) {
+ log.error("字段解密异常,原样返回。异常信息:【{}】", e.getMessage());
+ return value;
+ }
+ }
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/AesEncryptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/AesEncryptor.java
new file mode 100644
index 000000000..38bf28b4c
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/AesEncryptor.java
@@ -0,0 +1,72 @@
+package com.ruoyi.framework.manager.encryptor;
+
+import cn.hutool.core.util.HexUtil;
+import cn.hutool.crypto.Mode;
+import cn.hutool.crypto.Padding;
+import cn.hutool.crypto.symmetric.AES;
+import com.ruoyi.common.enums.AlgorithmType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.config.properties.EncryptFieldProperties;
+import com.ruoyi.framework.manager.encryptor.IEncryptor;
+import org.springframework.stereotype.Component;
+
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+
+/**
+ * AES算法实现
+ *
+ * @author 老马
+ * @date 2023-01-06 11:39
+ */
+@Component
+public class AesEncryptor implements IEncryptor {
+
+ /**
+ * 是否为本加解密处理的算法名称
+ *
+ * @param algorithm 算法名称
+ * @return 是否本类能处理的算法
+ */
+ @Override
+ public Boolean isMyAlgorithm(String algorithm) {
+ return StringUtils.equalsIgnoreCase(algorithm, AlgorithmType.AES.getAlgorithm());
+ }
+
+ /**
+ * AES加密
+ *
+ * @param value 待加密字符串
+ * @param properties 加解密配置信息
+ * @return 加密后的字符串
+ * @throws Exception 抛出异常
+ */
+ @Override
+ public String encrypt(String value, EncryptFieldProperties properties) throws Exception {
+
+ AES aes = new AES(Mode.CBC, Padding.PKCS5Padding,
+ new SecretKeySpec(HexUtil.decodeHex(properties.getSecretKey()), StringUtils.toRootUpperCase(properties.getAlgorithm())),
+ new IvParameterSpec(HexUtil.decodeHex(properties.getIvKey())));
+ if(StringUtils.endsWithIgnoreCase(properties.getEncodeType(), IEncryptor.ENCODETYPE_HEX)) {
+ return aes.encryptHex(value);
+ }else {
+ return aes.encryptBase64(value);
+ }
+ }
+
+ /**
+ * AES解密
+ *
+ * @param value 待解密字符串
+ * @param properties 加解密配置信息
+ * @return 解密后的字符串
+ * @throws Exception 抛出异常
+ */
+ @Override
+ public String decrypt(String value, EncryptFieldProperties properties) throws Exception {
+ AES aes = new AES(Mode.CBC, Padding.PKCS5Padding,
+ new SecretKeySpec(HexUtil.decodeHex(properties.getSecretKey()), properties.getAlgorithm()),
+ new IvParameterSpec(HexUtil.decodeHex(properties.getIvKey())));
+ return aes.decryptStr(value);
+ }
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/Base64Encryptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/Base64Encryptor.java
new file mode 100644
index 000000000..47bf4dfcf
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/Base64Encryptor.java
@@ -0,0 +1,54 @@
+package com.ruoyi.framework.manager.encryptor;
+
+import cn.hutool.core.codec.Base64;
+import com.ruoyi.common.enums.AlgorithmType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.config.properties.EncryptFieldProperties;
+import com.ruoyi.framework.manager.encryptor.IEncryptor;
+import org.springframework.stereotype.Component;
+
+/**
+ * Base64算法实现。不建议在生产环境使用
+ *
+ * @author 老马
+ * @date 2023-01-06 10:00
+ */
+@Component
+public class Base64Encryptor implements IEncryptor {
+ /**
+ * 是否为本加解密处理的算法名称
+ *
+ * @param algorithm 算法名称
+ * @return 是否本类能处理的算法
+ */
+ @Override
+ public Boolean isMyAlgorithm(String algorithm) {
+ return StringUtils.equalsIgnoreCase(algorithm, AlgorithmType.BASE64.getAlgorithm());
+ }
+
+ /**
+ * 加密
+ *
+ * @param value 待加密字符串
+ * @param properties 加解密配置信息
+ * @return 加密后的字符串
+ * @throws Exception 抛出异常
+ */
+ @Override
+ public String encrypt(String value, EncryptFieldProperties properties) throws Exception {
+ return Base64.encode(value);
+ }
+
+ /**
+ * 解密
+ *
+ * @param value 待解密字符串
+ * @param properties 加解密配置信息
+ * @return 解密后的字符串
+ * @throws Exception 抛出异常
+ */
+ @Override
+ public String decrypt(String value, EncryptFieldProperties properties) throws Exception {
+ return Base64.decodeStr(value);
+ }
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/IEncryptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/IEncryptor.java
new file mode 100644
index 000000000..b691d654e
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/IEncryptor.java
@@ -0,0 +1,42 @@
+package com.ruoyi.framework.manager.encryptor;
+
+import com.ruoyi.framework.config.properties.EncryptFieldProperties;
+
+/**
+ * 加解密执行者
+ *
+ * @author 老马
+ * @date 2023-01-06 09:20
+ */
+public interface IEncryptor {
+ /**
+ * 编码类型-16进制
+ */
+ String ENCODETYPE_HEX = "hex";
+
+ /**
+ * 是否为本加解密处理的算法名称
+ * @param algorithm 算法名称
+ * @return 是否本类能处理的算法
+ */
+ Boolean isMyAlgorithm(String algorithm);
+
+ /**
+ * 加密
+ * @param value 待加密字符串
+ * @param properties 加解密配置信息
+ * @return 加密后的字符串
+ * @throws Exception 抛出异常
+ */
+ String encrypt(String value, EncryptFieldProperties properties) throws Exception;
+
+ /**
+ * 解密
+ * @param value 待解密字符串
+ * @param properties 加解密配置信息
+ * @return 解密后的字符串
+ * @throws Exception 抛出异常
+ */
+ String decrypt(String value, EncryptFieldProperties properties) throws Exception;
+
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/RsaEncryptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/RsaEncryptor.java
new file mode 100644
index 000000000..9ca0b90d8
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/RsaEncryptor.java
@@ -0,0 +1,62 @@
+package com.ruoyi.framework.manager.encryptor;
+
+import cn.hutool.crypto.asymmetric.KeyType;
+import cn.hutool.crypto.asymmetric.RSA;
+import com.ruoyi.common.enums.AlgorithmType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.config.properties.EncryptFieldProperties;
+import com.ruoyi.framework.manager.encryptor.IEncryptor;
+import org.springframework.stereotype.Component;
+
+/**
+ * RSA算法实现
+ *
+ * @author 老马
+ * @date 2023-01-06 09:37
+ */
+@Component
+public class RsaEncryptor implements IEncryptor {
+ /**
+ * 是否为本加解密处理的算法名称
+ *
+ * @param algorithm 算法名称
+ * @return 是否本类能处理的算法
+ */
+ @Override
+ public Boolean isMyAlgorithm(String algorithm) {
+ return StringUtils.equalsIgnoreCase(algorithm, AlgorithmType.RSA.getAlgorithm());
+ }
+
+ /**
+ * 公钥加密
+ * 需要从properties读取公私钥信息
+ *
+ * @param value 待加密字符串
+ * @param properties 加解密配置信息
+ * @return 加密后的字符串
+ * @throws Exception 抛出异常
+ */
+ @Override
+ public String encrypt(String value, EncryptFieldProperties properties) throws Exception {
+ RSA rsa = new RSA(properties.getPrivateKey(), properties.getPublicKey());
+ if(StringUtils.endsWithIgnoreCase(properties.getEncodeType(), IEncryptor.ENCODETYPE_HEX)) {
+ return rsa.encryptHex(value, KeyType.PublicKey);
+ }else {
+ return rsa.encryptBase64(value, KeyType.PublicKey);
+ }
+ }
+
+ /**
+ * 私钥解密
+ *
+ * @param value 待解密字符串
+ * @param properties 加解密配置信息
+ * @return 解密后的字符串
+ * @throws Exception 抛出异常
+ */
+ @Override
+ public String decrypt(String value, EncryptFieldProperties properties) throws Exception {
+ RSA rsa = new RSA(properties.getPrivateKey(), properties.getPublicKey());
+ return rsa.decryptStr(value, KeyType.PrivateKey);
+ }
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/Sm2Encryptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/Sm2Encryptor.java
new file mode 100644
index 000000000..4b6f2d085
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/Sm2Encryptor.java
@@ -0,0 +1,62 @@
+package com.ruoyi.framework.manager.encryptor;
+
+import cn.hutool.crypto.SmUtil;
+import cn.hutool.crypto.asymmetric.KeyType;
+import cn.hutool.crypto.asymmetric.SM2;
+import com.ruoyi.common.enums.AlgorithmType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.config.properties.EncryptFieldProperties;
+import com.ruoyi.framework.manager.encryptor.IEncryptor;
+import org.springframework.stereotype.Component;
+
+/**
+ * sm2算法实现
+ *
+ * @author 老马
+ * @date 2023-01-06 17:13
+ */
+@Component
+public class Sm2Encryptor implements IEncryptor {
+ /**
+ * 是否为本加解密处理的算法名称
+ *
+ * @param algorithm 算法名称
+ * @return 是否本类能处理的算法
+ */
+ @Override
+ public Boolean isMyAlgorithm(String algorithm) {
+ return StringUtils.equalsIgnoreCase(algorithm, AlgorithmType.SM2.getAlgorithm());
+ }
+
+ /**
+ * 加密
+ *
+ * @param value 待加密字符串
+ * @param properties 加解密配置信息
+ * @return 加密后的字符串
+ * @throws Exception 抛出异常
+ */
+ @Override
+ public String encrypt(String value, EncryptFieldProperties properties) throws Exception {
+ SM2 sm2 = SmUtil.sm2(properties.getPrivateKey(), properties.getPublicKey());
+ if(StringUtils.endsWithIgnoreCase(properties.getEncodeType(), IEncryptor.ENCODETYPE_HEX)) {
+ return sm2.encryptHex(value, KeyType.PublicKey);
+ }else {
+ return sm2.encryptBase64(value, KeyType.PublicKey);
+ }
+ }
+
+ /**
+ * 解密
+ *
+ * @param value 待解密字符串
+ * @param properties 加解密配置信息
+ * @return 解密后的字符串
+ * @throws Exception 抛出异常
+ */
+ @Override
+ public String decrypt(String value, EncryptFieldProperties properties) throws Exception {
+ SM2 sm2 = SmUtil.sm2(properties.getPrivateKey(), properties.getPublicKey());
+ return sm2.decryptStr(value, KeyType.PrivateKey);
+ }
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/Sm4Encryptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/Sm4Encryptor.java
new file mode 100644
index 000000000..1443facaa
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/encryptor/Sm4Encryptor.java
@@ -0,0 +1,60 @@
+package com.ruoyi.framework.manager.encryptor;
+
+import cn.hutool.crypto.symmetric.SymmetricCrypto;
+import com.ruoyi.common.enums.AlgorithmType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.config.properties.EncryptFieldProperties;
+import com.ruoyi.framework.manager.encryptor.IEncryptor;
+import org.springframework.stereotype.Component;
+
+/**
+ * sm4算法实现
+ *
+ * @author 老马
+ * @date 2023-01-06 17:40
+ */
+@Component
+public class Sm4Encryptor implements IEncryptor {
+ /**
+ * 是否为本加解密处理的算法名称
+ *
+ * @param algorithm 算法名称
+ * @return 是否本类能处理的算法
+ */
+ @Override
+ public Boolean isMyAlgorithm(String algorithm) {
+ return StringUtils.equalsIgnoreCase(algorithm, AlgorithmType.SM4.getAlgorithm());
+ }
+
+ /**
+ * 加密
+ *
+ * @param value 待加密字符串
+ * @param properties 加解密配置信息
+ * @return 加密后的字符串
+ * @throws Exception 抛出异常
+ */
+ @Override
+ public String encrypt(String value, EncryptFieldProperties properties) throws Exception {
+ SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding", properties.getSecretKey().getBytes());
+ if(StringUtils.endsWithIgnoreCase(properties.getEncodeType(), IEncryptor.ENCODETYPE_HEX)) {
+ return sm4.encryptHex(value);
+ }else {
+ return sm4.encryptBase64(value);
+ }
+ }
+
+ /**
+ * 解密
+ *
+ * @param value 待解密字符串
+ * @param properties 加解密配置信息
+ * @return 解密后的字符串
+ * @throws Exception 抛出异常
+ */
+ @Override
+ public String decrypt(String value, EncryptFieldProperties properties) throws Exception {
+ SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding", properties.getSecretKey().getBytes());
+ return sm4.decryptStr(value);
+ }
+}