From 477daddedbd96e912e89e20d0bc4526031e12a52 Mon Sep 17 00:00:00 2001
From: Github_lizhw <171332584@qq.com>
Date: Sat, 7 Dec 2024 23:17:21 +0800
Subject: [PATCH] =?UTF-8?q?sso=20server=20=E7=99=BB=E5=BD=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common/core/constant/CacheNames.java | 5 +
ruoyi-modules/ruoyi-sso-server/Dockerfile | 4 +-
ruoyi-modules/ruoyi-sso-server/pom.xml | 330 +++++++++---------
.../server/controller/CaptchaController.java | 78 -----
.../controller/SsoServerController.java | 74 +++-
.../src/main/resources/application.yml | 27 ++
.../convert/SysSaasClientVoConvert.java | 17 +
.../convert/SysSaasDictDataVoConvert.java | 18 +
.../convert/SysSaasLogininforBoConvert.java | 18 +
.../convert/SysSaasOperLogBoConvert.java | 27 ++
.../convert/SysSaasSocialBoConvert.java | 17 +
.../convert/SysSaasSocialVoConvert.java | 17 +
.../convert/SysSaasTenantVoConvert.java | 18 +
.../domain/convert/SysSaasUserBoConvert.java | 28 ++
.../domain/convert/SysSaasUserVoConvert.java | 17 +
.../impl/SysSaasClientServiceImpl.java | 8 +-
16 files changed, 443 insertions(+), 260 deletions(-)
delete mode 100644 ruoyi-modules/ruoyi-sso-server/src/main/java/org/ruoyi/sso/server/controller/CaptchaController.java
create mode 100644 ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasClientVoConvert.java
create mode 100644 ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasDictDataVoConvert.java
create mode 100644 ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasLogininforBoConvert.java
create mode 100644 ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasOperLogBoConvert.java
create mode 100644 ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasSocialBoConvert.java
create mode 100644 ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasSocialVoConvert.java
create mode 100644 ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasTenantVoConvert.java
create mode 100644 ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasUserBoConvert.java
create mode 100644 ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasUserVoConvert.java
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java
index 28ba17739..4b5557a97 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java
@@ -40,6 +40,11 @@ public interface CacheNames {
*/
String SYS_CLIENT = GlobalConstants.GLOBAL_REDIS_KEY + "sys_client#30d";
+ /**
+ * 客户端
+ */
+ String SYS_SAAS_CLIENT = GlobalConstants.GLOBAL_REDIS_KEY + "sys_saas_client#30d";
+
/**
* 用户账户
*/
diff --git a/ruoyi-modules/ruoyi-sso-server/Dockerfile b/ruoyi-modules/ruoyi-sso-server/Dockerfile
index 17bcaf20d..5caf3ac6c 100644
--- a/ruoyi-modules/ruoyi-sso-server/Dockerfile
+++ b/ruoyi-modules/ruoyi-sso-server/Dockerfile
@@ -11,7 +11,9 @@ RUN mkdir -p /ruoyi/server/logs \
WORKDIR /ruoyi/server
-ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+ENV SERVER_PORT=19000 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
+# 设置一个默认的容器名
+ENV CONTAINER_NAME ruoyi-sso-server
EXPOSE ${SERVER_PORT}
diff --git a/ruoyi-modules/ruoyi-sso-server/pom.xml b/ruoyi-modules/ruoyi-sso-server/pom.xml
index 327e7d638..9dce97c94 100644
--- a/ruoyi-modules/ruoyi-sso-server/pom.xml
+++ b/ruoyi-modules/ruoyi-sso-server/pom.xml
@@ -1,184 +1,178 @@
-
- org.dromara
- ruoyi-modules
- ${revision}
-
- 4.0.0
- ruoyi-sso-server
- jar
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ org.dromara
+ ruoyi-modules
+ ${revision}
+
+ 4.0.0
+ ruoyi-sso-server
+ jar
- sso-server
+ sso-server
-
-
- 1.38.0
-
+
+
+ 1.38.0
+
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
+
-
-
- org.springframework.boot
- spring-boot-starter-web
-
+
+ org.dromara
+ ruoyi-common-core
+
+
+
+ org.dromara
+ ruoyi-common-redis
+ ${revision}
+
-
- org.dromara
- ruoyi-common-core
-
-
-
- org.dromara
- ruoyi-common-redis
- ${revision}
-
+
+
+ org.dromara
+ ruoyi-common-tenant
+ ${revision}
+
-
-
- org.dromara
- ruoyi-common-redis
-
-
-
- cn.dev33
- sa-token-spring-boot3-starter
-
+
+
+ org.dromara
+ ruoyi-api-system
+
+
+ org.dromara
+ ruoyi-common-log
+
+
+ org.dromara
+ ruoyi-common-ratelimiter
+
-
-
- cn.dev33
- sa-token-jwt
-
+
+ org.dromara
+ ruoyi-common-social
+
+
+ org.dromara
+ ruoyi-common-encrypt
+
-
-
-
-
-
-
- cn.dev33
- sa-token-redis-jackson
- 1.38.0
-
-
- org.apache.commons
- commons-pool2
-
-
-
-
- cn.dev33
- sa-token-sso
- 1.38.0
-
-
-
-
- cn.dev33
- sa-token-sso
- 1.38.0
-
-
-
-
-
-
-
-
-
-
-
- org.dromara
- ruoyi-common-tenant
- ${revision}
-
-
-
-
- org.dromara
- ruoyi-api-system
-
-
-
-
- org.apache.dubbo
- dubbo-spring-boot-starter
-
-
-
- org.apache.dubbo
- dubbo-nacos-spring-boot-starter
-
+
+
+
+
+
+
-
-
- me.zhyd.oauth
- JustAuth
- 1.16.6
-
-
- org.dromara
- ruoyi-common-log
-
-
- org.dromara
- ruoyi-common-ratelimiter
-
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
-
- cn.hutool
- hutool-captcha
-
-
- org.dromara
- ruoyi-common-social
-
-
- org.dromara
- ruoyi-common-encrypt
-
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
-
-
-
-
-
-
-
-
-
-
+
+
+ cn.dev33
+ sa-token-spring-boot3-starter
+
-
-
- ${project.artifactId}
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- ${spring-boot.version}
-
-
-
- repackage
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- ${maven-jar-plugin.version}
-
-
-
+
+
+ cn.dev33
+ sa-token-jwt
+
+
+
+
+ cn.dev33
+ sa-token-redis-jackson
+ 1.38.0
+
+
+ org.apache.commons
+ commons-pool2
+
+
+
+
+ cn.dev33
+ sa-token-sso
+ 1.38.0
+
+
+
+
+ cn.dev33
+ sa-token-sso
+ 1.38.0
+
+
+
+
+ org.apache.dubbo
+ dubbo-spring-boot-starter
+
+
+
+ org.apache.dubbo
+ dubbo-nacos-spring-boot-starter
+
+
+
+
+
+ me.zhyd.oauth
+ JustAuth
+ 1.16.6
+
+
+
+ cn.hutool
+ hutool-captcha
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+
+
+ repackage
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ ${maven-jar-plugin.version}
+
+
+
diff --git a/ruoyi-modules/ruoyi-sso-server/src/main/java/org/ruoyi/sso/server/controller/CaptchaController.java b/ruoyi-modules/ruoyi-sso-server/src/main/java/org/ruoyi/sso/server/controller/CaptchaController.java
deleted file mode 100644
index 6620ae65c..000000000
--- a/ruoyi-modules/ruoyi-sso-server/src/main/java/org/ruoyi/sso/server/controller/CaptchaController.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.ruoyi.sso.server.controller;
-
-import cn.hutool.captcha.AbstractCaptcha;
-import cn.hutool.captcha.generator.CodeGenerator;
-import cn.hutool.core.util.IdUtil;
-import org.ruoyi.sso.server.domain.vo.CaptchaVo;
-import org.ruoyi.sso.server.enums.CaptchaType;
-import org.ruoyi.sso.server.properties.CaptchaProperties;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.common.core.constant.Constants;
-import org.dromara.common.core.constant.GlobalConstants;
-import org.dromara.common.core.domain.R;
-import org.dromara.common.core.utils.SpringUtils;
-import org.dromara.common.core.utils.StringUtils;
-import org.dromara.common.core.utils.reflect.ReflectUtils;
-import org.dromara.common.ratelimiter.annotation.RateLimiter;
-import org.dromara.common.ratelimiter.enums.LimitType;
-import org.dromara.common.redis.utils.RedisUtils;
-import org.springframework.expression.Expression;
-import org.springframework.expression.ExpressionParser;
-import org.springframework.expression.spel.standard.SpelExpressionParser;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.time.Duration;
-
-/**
- * 验证码操作处理
- *
- * @author Lion Li
- */
-@Slf4j
-@Validated
-@RequiredArgsConstructor
-@RestController
-public class CaptchaController {
-
- private final CaptchaProperties captchaProperties;
-
- /**
- * 生成验证码
- */
- @RateLimiter(time = 60, count = 10, limitType = LimitType.IP)
- @GetMapping("/code")
- public R getCode() {
- CaptchaVo captchaVo = new CaptchaVo();
- boolean captchaEnabled = captchaProperties.getEnabled();
- if (!captchaEnabled) {
- captchaVo.setCaptchaEnabled(false);
- return R.ok(captchaVo);
- }
- // 保存验证码信息
- String uuid = IdUtil.simpleUUID();
- String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + uuid;
- // 生成验证码
- CaptchaType captchaType = captchaProperties.getType();
- boolean isMath = CaptchaType.MATH == captchaType;
- Integer length = isMath ? captchaProperties.getNumberLength() : captchaProperties.getCharLength();
- CodeGenerator codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), length);
- AbstractCaptcha captcha = SpringUtils.getBean(captchaProperties.getCategory().getClazz());
- captcha.setGenerator(codeGenerator);
- captcha.createCode();
- // 如果是数学验证码,使用SpEL表达式处理验证码结果
- String code = captcha.getCode();
- if (isMath) {
- ExpressionParser parser = new SpelExpressionParser();
- Expression exp = parser.parseExpression(StringUtils.remove(code, "="));
- code = exp.getValue(String.class);
- }
- RedisUtils.setCacheObject(verifyKey, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
- captchaVo.setUuid(uuid);
- captchaVo.setImg(captcha.getImageBase64());
- return R.ok(captchaVo);
- }
-
-}
diff --git a/ruoyi-modules/ruoyi-sso-server/src/main/java/org/ruoyi/sso/server/controller/SsoServerController.java b/ruoyi-modules/ruoyi-sso-server/src/main/java/org/ruoyi/sso/server/controller/SsoServerController.java
index a6d5a9ece..250070866 100644
--- a/ruoyi-modules/ruoyi-sso-server/src/main/java/org/ruoyi/sso/server/controller/SsoServerController.java
+++ b/ruoyi-modules/ruoyi-sso-server/src/main/java/org/ruoyi/sso/server/controller/SsoServerController.java
@@ -10,30 +10,46 @@ import cn.dev33.satoken.sso.util.SaSsoConsts;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaFoxUtil;
import cn.dev33.satoken.util.SaResult;
+import cn.hutool.captcha.AbstractCaptcha;
+import cn.hutool.captcha.generator.CodeGenerator;
+import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
-import org.ruoyi.sso.server.domain.vo.LoginVo;
-import org.ruoyi.sso.server.service.IAuthStrategy;
-import org.ruoyi.sso.server.service.SysLoginService;
-import org.ruoyi.sso.server.config.satoken.LoginSaasHelper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.constant.Constants;
+import org.dromara.common.core.constant.GlobalConstants;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.domain.model.LoginBody;
import org.dromara.common.core.utils.MessageUtils;
+import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ValidatorUtils;
+import org.dromara.common.core.utils.reflect.ReflectUtils;
+import org.dromara.common.encrypt.annotation.ApiEncrypt;
import org.dromara.common.json.utils.JsonUtils;
+import org.dromara.common.ratelimiter.annotation.RateLimiter;
+import org.dromara.common.ratelimiter.enums.LimitType;
+import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.system.api.RemoteClientService;
import org.dromara.system.api.domain.vo.RemoteClientVo;
+import org.ruoyi.sso.server.config.satoken.LoginSaasHelper;
+import org.ruoyi.sso.server.domain.vo.CaptchaVo;
+import org.ruoyi.sso.server.domain.vo.LoginVo;
+import org.ruoyi.sso.server.enums.CaptchaType;
+import org.ruoyi.sso.server.properties.CaptchaProperties;
+import org.ruoyi.sso.server.service.IAuthStrategy;
+import org.ruoyi.sso.server.service.SysLoginService;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.expression.Expression;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.spel.standard.SpelExpressionParser;
+import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
+import java.time.Duration;
+
/**
* Sa-Token-SSO Server端 Controller
*
@@ -44,10 +60,49 @@ import org.springframework.web.servlet.ModelAndView;
@Slf4j
public class SsoServerController {
private final SysLoginService sysLoginService;
+ private final CaptchaProperties captchaProperties;
@DubboReference
private RemoteClientService remoteClientService;
+
+ /**
+ * 生成验证码
+ */
+ @RateLimiter(time = 60, count = 10, limitType = LimitType.IP)
+ @GetMapping("/sso/getCaptcha")
+ public R getCode() {
+ CaptchaVo captchaVo = new CaptchaVo();
+ boolean captchaEnabled = captchaProperties.getEnabled();
+ if (!captchaEnabled) {
+ captchaVo.setCaptchaEnabled(false);
+ return R.ok(captchaVo);
+ }
+ // 保存验证码信息
+ String uuid = IdUtil.simpleUUID();
+ String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + uuid;
+ // 生成验证码
+ CaptchaType captchaType = captchaProperties.getType();
+ boolean isMath = CaptchaType.MATH == captchaType;
+ Integer length = isMath ? captchaProperties.getNumberLength() : captchaProperties.getCharLength();
+ CodeGenerator codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), length);
+ AbstractCaptcha captcha = SpringUtils.getBean(captchaProperties.getCategory().getClazz());
+ captcha.setGenerator(codeGenerator);
+ captcha.createCode();
+ // 如果是数学验证码,使用SpEL表达式处理验证码结果
+ String code = captcha.getCode();
+ if (isMath) {
+ ExpressionParser parser = new SpelExpressionParser();
+ Expression exp = parser.parseExpression(StringUtils.remove(code, "="));
+ code = exp.getValue(String.class);
+ }
+ RedisUtils.setCacheObject(verifyKey, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
+ captchaVo.setUuid(uuid);
+ captchaVo.setImg(captcha.getImageBase64());
+ return R.ok(captchaVo);
+ }
+
+
/**
* SSO-Server端:处理所有SSO相关请求
* http://{host}:{port}/sso/auth -- 单点登录授权地址,接受参数:redirect=授权重定向地址
@@ -65,9 +120,10 @@ public class SsoServerController {
return SaSsoServerProcessor.instance.dister();
}
-// @ApiEncrypt
+ @ApiEncrypt
@PostMapping("/sso/doLogin")
public Object ssoDoLoginRequest(@RequestBody String body) {
+ //todo 验证码提前验证,额外加上限流
LoginBody loginBody = JsonUtils.parseObject(body, LoginBody.class);
ValidatorUtils.validate(loginBody);
// 授权类型和客户端id
diff --git a/ruoyi-modules/ruoyi-sso-server/src/main/resources/application.yml b/ruoyi-modules/ruoyi-sso-server/src/main/resources/application.yml
index 762a2edd3..dd913088e 100644
--- a/ruoyi-modules/ruoyi-sso-server/src/main/resources/application.yml
+++ b/ruoyi-modules/ruoyi-sso-server/src/main/resources/application.yml
@@ -56,8 +56,35 @@ sa-token:
auth-url: http://localhost:5173/#/sso-login
active-timeout: 30
+
+# api接口加密
+api-decrypt:
+ # 是否开启全局接口加密
+ enabled: true
+ # AES 加密头标识
+ headerFlag: encrypt-key
+ # 响应加密公钥 非对称算法的公私钥 如:SM2,RSA 使用者请自行更换
+ # 对应前端解密私钥 MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAmc3CuPiGL/LcIIm7zryCEIbl1SPzBkr75E2VMtxegyZ1lYRD+7TZGAPkvIsBcaMs6Nsy0L78n2qh+lIZMpLH8wIDAQABAkEAk82Mhz0tlv6IVCyIcw/s3f0E+WLmtPFyR9/WtV3Y5aaejUkU60JpX4m5xNR2VaqOLTZAYjW8Wy0aXr3zYIhhQQIhAMfqR9oFdYw1J9SsNc+CrhugAvKTi0+BF6VoL6psWhvbAiEAxPPNTmrkmrXwdm/pQQu3UOQmc2vCZ5tiKpW10CgJi8kCIFGkL6utxw93Ncj4exE/gPLvKcT+1Emnoox+O9kRXss5AiAMtYLJDaLEzPrAWcZeeSgSIzbL+ecokmFKSDDcRske6QIgSMkHedwND1olF8vlKsJUGK3BcdtM8w4Xq7BpSBwsloE=
+ publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJnNwrj4hi/y3CCJu868ghCG5dUj8wZK++RNlTLcXoMmdZWEQ/u02RgD5LyLAXGjLOjbMtC+/J9qofpSGTKSx/MCAwEAAQ==
+ # 请求解密私钥 非对称算法的公私钥 如:SM2,RSA 使用者请自行更换
+ # 对应前端加密公钥 MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==
+ privateKey: MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKNPuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gAkM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWowcSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99EcvDQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthhYhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3UP8iWi1Qw0Y=
+
+
# ruoyi-security配置
security:
+ captcha:
+ enabled: true
+ # 页面 <参数设置> 可开启关闭 验证码校验
+ # 验证码类型 math 数组计算 char 字符验证
+ type: MATH
+ # line 线段干扰 circle 圆圈干扰 shear 扭曲干扰
+ category: CIRCLE
+ # 数字验证码位数
+ numberLength: 1
+ # 字符验证码长度
+ charLength: 4
+
# 排除路径
excludes:
# 静态资源
diff --git a/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasClientVoConvert.java b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasClientVoConvert.java
new file mode 100644
index 000000000..c7f5cbecf
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasClientVoConvert.java
@@ -0,0 +1,17 @@
+package org.dromara.system.saas.domain.convert;
+
+import io.github.linpeilie.BaseMapper;
+import org.dromara.system.api.domain.vo.RemoteClientVo;
+import org.dromara.system.saas.domain.vo.SysSaasClientVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.ReportingPolicy;
+
+/**
+ * 客户端数据转换器
+ *
+ * @author Michelle.Chung
+ */
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface SysSaasClientVoConvert extends BaseMapper {
+}
diff --git a/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasDictDataVoConvert.java b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasDictDataVoConvert.java
new file mode 100644
index 000000000..cf5955282
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasDictDataVoConvert.java
@@ -0,0 +1,18 @@
+package org.dromara.system.saas.domain.convert;
+
+import io.github.linpeilie.BaseMapper;
+import org.dromara.system.api.domain.vo.RemoteDictDataVo;
+import org.dromara.system.saas.domain.vo.SysSaasDictDataVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.ReportingPolicy;
+
+/**
+ * 字典数据转换器
+ *
+ * @author zhujie
+ */
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface SysSaasDictDataVoConvert extends BaseMapper {
+
+}
diff --git a/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasLogininforBoConvert.java b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasLogininforBoConvert.java
new file mode 100644
index 000000000..ae0a50558
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasLogininforBoConvert.java
@@ -0,0 +1,18 @@
+package org.dromara.system.saas.domain.convert;
+
+import io.github.linpeilie.BaseMapper;
+import org.dromara.system.api.domain.bo.RemoteLogininforBo;
+import org.dromara.system.saas.domain.bo.SysSaasLogininforBo;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.ReportingPolicy;
+
+/**
+ * 登录日志转换器
+ *
+ * @author zhujie
+ */
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface SysSaasLogininforBoConvert extends BaseMapper {
+
+}
diff --git a/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasOperLogBoConvert.java b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasOperLogBoConvert.java
new file mode 100644
index 000000000..f30a2fc89
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasOperLogBoConvert.java
@@ -0,0 +1,27 @@
+package org.dromara.system.saas.domain.convert;
+
+import io.github.linpeilie.BaseMapper;
+import org.dromara.system.api.domain.bo.RemoteOperLogBo;
+import org.dromara.system.saas.domain.bo.SysSaasOperLogBo;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.ReportingPolicy;
+
+/**
+ * 操作日志转换器
+ *
+ * @author zhujie
+ */
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface SysSaasOperLogBoConvert extends BaseMapper {
+
+ /**
+ * RemoteOperLogBoToSysOperLogBo
+ *
+ * @param remoteOperLogBo 待转换对象
+ * @return 转换后对象
+ */
+ @Mapping(target = "businessTypes", ignore = true)
+ SysSaasOperLogBo convert(RemoteOperLogBo remoteOperLogBo);
+}
diff --git a/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasSocialBoConvert.java b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasSocialBoConvert.java
new file mode 100644
index 000000000..7b5c62ada
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasSocialBoConvert.java
@@ -0,0 +1,17 @@
+package org.dromara.system.saas.domain.convert;
+
+import io.github.linpeilie.BaseMapper;
+import org.dromara.system.api.domain.bo.RemoteSocialBo;
+import org.dromara.system.saas.domain.bo.SysSaasSocialBo;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.ReportingPolicy;
+
+/**
+ * 社交数据转换器
+ *
+ * @author Michelle.Chung
+ */
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface SysSaasSocialBoConvert extends BaseMapper {
+}
diff --git a/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasSocialVoConvert.java b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasSocialVoConvert.java
new file mode 100644
index 000000000..f76d54f1d
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasSocialVoConvert.java
@@ -0,0 +1,17 @@
+package org.dromara.system.saas.domain.convert;
+
+import io.github.linpeilie.BaseMapper;
+import org.dromara.system.api.domain.vo.RemoteSocialVo;
+import org.dromara.system.saas.domain.vo.SysSaasSocialVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.ReportingPolicy;
+
+/**
+ * 社交数据转换器
+ *
+ * @author Michelle.Chung
+ */
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface SysSaasSocialVoConvert extends BaseMapper {
+}
diff --git a/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasTenantVoConvert.java b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasTenantVoConvert.java
new file mode 100644
index 000000000..344930c03
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasTenantVoConvert.java
@@ -0,0 +1,18 @@
+package org.dromara.system.saas.domain.convert;
+
+import io.github.linpeilie.BaseMapper;
+import org.dromara.system.api.domain.vo.RemoteTenantVo;
+import org.dromara.system.saas.domain.vo.SysSaasTenantVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.ReportingPolicy;
+
+/**
+ * 租户转换器
+ *
+ * @author zhujie
+ */
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface SysSaasTenantVoConvert extends BaseMapper {
+
+}
diff --git a/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasUserBoConvert.java b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasUserBoConvert.java
new file mode 100644
index 000000000..16a87d98b
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasUserBoConvert.java
@@ -0,0 +1,28 @@
+package org.dromara.system.saas.domain.convert;
+
+import io.github.linpeilie.BaseMapper;
+import org.dromara.system.api.domain.bo.RemoteUserBo;
+import org.dromara.system.saas.domain.bo.SysSaasUserBo;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.ReportingPolicy;
+
+/**
+ * 用户信息转换器
+ *
+ * @author zhujie
+ */
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface SysSaasUserBoConvert extends BaseMapper {
+
+ /**
+ * RemoteUserBoToSysUserBo
+ *
+ * @param remoteUserBo 待转换对象
+ * @return 转换后对象
+ */
+ @Mapping(target = "roleIds", ignore = true)
+ @Mapping(target = "postIds", ignore = true)
+ SysSaasUserBo convert(RemoteUserBo remoteUserBo);
+}
diff --git a/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasUserVoConvert.java b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasUserVoConvert.java
new file mode 100644
index 000000000..433012973
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/domain/convert/SysSaasUserVoConvert.java
@@ -0,0 +1,17 @@
+package org.dromara.system.saas.domain.convert;
+
+import io.github.linpeilie.BaseMapper;
+import org.dromara.system.api.domain.vo.RemoteUserVo;
+import org.dromara.system.saas.domain.vo.SysSaasUserVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.ReportingPolicy;
+
+/**
+ * 租户转换器
+ * @author zhujie
+ */
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface SysSaasUserVoConvert extends BaseMapper {
+
+}
diff --git a/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/service/impl/SysSaasClientServiceImpl.java b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/service/impl/SysSaasClientServiceImpl.java
index b9b20aa70..5e00d65d0 100644
--- a/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/service/impl/SysSaasClientServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system-saas/src/main/java/org/dromara/system/saas/service/impl/SysSaasClientServiceImpl.java
@@ -51,7 +51,7 @@ public class SysSaasClientServiceImpl implements ISysSaasClientService {
/**
* 查询客户端管理
*/
- @Cacheable(cacheNames = CacheNames.SYS_CLIENT, key = "#clientId")
+ @Cacheable(cacheNames = CacheNames.SYS_SAAS_CLIENT, key = "#clientId")
@Override
public SysSaasClientVo queryByClientId(String clientId) {
return baseMapper.selectVoOne(new LambdaQueryWrapper().eq(SysSaasClient::getClientId, clientId));
@@ -109,7 +109,7 @@ public class SysSaasClientServiceImpl implements ISysSaasClientService {
/**
* 修改客户端管理
*/
- @CacheEvict(cacheNames = CacheNames.SYS_CLIENT, key = "#bo.clientId")
+ @CacheEvict(cacheNames = CacheNames.SYS_SAAS_CLIENT, key = "#bo.clientId")
@Override
public Boolean updateByBo(SysSaasClientBo bo) {
SysSaasClient update = MapstructUtils.convert(bo, SysSaasClient.class);
@@ -121,7 +121,7 @@ public class SysSaasClientServiceImpl implements ISysSaasClientService {
/**
* 修改状态
*/
- @CacheEvict(cacheNames = CacheNames.SYS_CLIENT, key = "#clientId")
+ @CacheEvict(cacheNames = CacheNames.SYS_SAAS_CLIENT, key = "#clientId")
@Override
public int updateUserStatus(String clientId, String status) {
return baseMapper.update(null,
@@ -140,7 +140,7 @@ public class SysSaasClientServiceImpl implements ISysSaasClientService {
/**
* 批量删除客户端管理
*/
- @CacheEvict(cacheNames = CacheNames.SYS_CLIENT, allEntries = true)
+ @CacheEvict(cacheNames = CacheNames.SYS_SAAS_CLIENT, allEntries = true)
@Override
public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
if (isValid) {