From ea1a654c5d8bbda5d63d888be4f2d840fa617d53 Mon Sep 17 00:00:00 2001 From: fit2-zhao Date: Thu, 9 Nov 2023 10:51:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BC=80=E5=8F=91=E9=85=8D=E9=A2=9D?= =?UTF-8?q?=E6=8F=92=E6=A7=BD=E6=94=AF=E6=8C=81=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E9=85=8D=E9=A2=9D=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/sdk/spi/QuotaPlugin.java | 7 ++++ .../sdk/constants/PluginScenarioType.java | 6 +++- .../system/config/QuotaInterceptor.java | 32 ++++++++++++++++++ .../system/service/PluginService.java | 9 +++-- .../controller/PluginControllerTests.java | 13 +++++++ .../resources/file/cloud-quota-plugin-3.x.jar | Bin 0 -> 2132971 bytes 6 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 backend/framework/plugin/plugin-sdk/src/main/java/io/metersphere/plugin/sdk/spi/QuotaPlugin.java create mode 100644 backend/services/system-setting/src/main/java/io/metersphere/system/config/QuotaInterceptor.java create mode 100644 backend/services/system-setting/src/test/resources/file/cloud-quota-plugin-3.x.jar diff --git a/backend/framework/plugin/plugin-sdk/src/main/java/io/metersphere/plugin/sdk/spi/QuotaPlugin.java b/backend/framework/plugin/plugin-sdk/src/main/java/io/metersphere/plugin/sdk/spi/QuotaPlugin.java new file mode 100644 index 0000000000..e4715bbce3 --- /dev/null +++ b/backend/framework/plugin/plugin-sdk/src/main/java/io/metersphere/plugin/sdk/spi/QuotaPlugin.java @@ -0,0 +1,7 @@ +package io.metersphere.plugin.sdk.spi; + +import io.metersphere.plugin.sdk.util.MSPluginException; + +public abstract class QuotaPlugin extends AbstractMsPlugin { + public abstract void interceptor(Object pjp) throws MSPluginException; +} diff --git a/backend/framework/sdk/src/main/java/io/metersphere/sdk/constants/PluginScenarioType.java b/backend/framework/sdk/src/main/java/io/metersphere/sdk/constants/PluginScenarioType.java index 0edfc5936f..2f01397013 100644 --- a/backend/framework/sdk/src/main/java/io/metersphere/sdk/constants/PluginScenarioType.java +++ b/backend/framework/sdk/src/main/java/io/metersphere/sdk/constants/PluginScenarioType.java @@ -12,5 +12,9 @@ public enum PluginScenarioType { /** * jdbc 驱动插件 */ - JDBC_DRIVER + JDBC_DRIVER, + /** + * 配额控制 + */ + QUOTA } diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/config/QuotaInterceptor.java b/backend/services/system-setting/src/main/java/io/metersphere/system/config/QuotaInterceptor.java new file mode 100644 index 0000000000..7f2c95174d --- /dev/null +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/config/QuotaInterceptor.java @@ -0,0 +1,32 @@ +package io.metersphere.system.config; + +import io.metersphere.plugin.sdk.spi.QuotaPlugin; +import io.metersphere.system.service.PluginLoadService; +import jakarta.annotation.Resource; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.pf4j.PluginWrapper; +import org.springframework.stereotype.Component; + +@Aspect +@Component +public class QuotaInterceptor { + @Resource + private PluginLoadService pluginLoadService; + // 插件ID + private final String QUOTA = "cloud-quota-plugin"; + + @Around("execution(* io.metersphere..*(..)) && " + + "(@annotation(org.springframework.web.bind.annotation.PostMapping) ||" + + "@annotation(org.springframework.web.bind.annotation.GetMapping)|| " + + "@annotation(org.springframework.web.bind.annotation.RequestMapping))") + public Object interceptor(ProceedingJoinPoint pjp) throws Throwable { + // 验证配额规则 + PluginWrapper pluginWrapper = pluginLoadService.getMsPluginManager().getPlugin(QUOTA); + if (pluginWrapper != null && pluginWrapper.getPlugin() instanceof QuotaPlugin quotaPlugin) { + quotaPlugin.interceptor(pjp); + } + return pjp.proceed(); + } +} diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/service/PluginService.java b/backend/services/system-setting/src/main/java/io/metersphere/system/service/PluginService.java index 08f0924b89..e69d042c91 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/service/PluginService.java +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/service/PluginService.java @@ -7,9 +7,9 @@ import io.metersphere.plugin.platform.dto.SelectOption; import io.metersphere.plugin.platform.spi.AbstractPlatformPlugin; import io.metersphere.plugin.platform.spi.Platform; import io.metersphere.plugin.sdk.spi.MsPlugin; +import io.metersphere.plugin.sdk.spi.QuotaPlugin; import io.metersphere.sdk.constants.KafkaTopicConstants; import io.metersphere.sdk.constants.PluginScenarioType; -import io.metersphere.system.dto.sdk.OptionDTO; import io.metersphere.sdk.exception.MSException; import io.metersphere.sdk.util.BeanUtils; import io.metersphere.sdk.util.JSON; @@ -18,10 +18,11 @@ import io.metersphere.system.domain.Plugin; import io.metersphere.system.domain.PluginExample; import io.metersphere.system.dto.PluginDTO; import io.metersphere.system.dto.PluginNotifiedDTO; -import io.metersphere.system.mapper.ExtPluginMapper; -import io.metersphere.system.mapper.PluginMapper; import io.metersphere.system.dto.request.PlatformOptionRequest; import io.metersphere.system.dto.request.PluginUpdateRequest; +import io.metersphere.system.dto.sdk.OptionDTO; +import io.metersphere.system.mapper.ExtPluginMapper; +import io.metersphere.system.mapper.PluginMapper; import io.metersphere.system.utils.ServiceUtils; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; @@ -165,6 +166,8 @@ public class PluginService { plugin.setScenario(PluginScenarioType.API_PROTOCOL.name()); } else if (msPlugin instanceof AbstractPlatformPlugin) { plugin.setScenario(PluginScenarioType.PLATFORM.name()); + }else if(msPlugin instanceof QuotaPlugin){ + plugin.setScenario(PluginScenarioType.QUOTA.name()); } plugin.setXpack(msPlugin.isXpack()); plugin.setPluginId(descriptor.getPluginId() + "-" + descriptor.getVersion()); diff --git a/backend/services/system-setting/src/test/java/io/metersphere/system/controller/PluginControllerTests.java b/backend/services/system-setting/src/test/java/io/metersphere/system/controller/PluginControllerTests.java index 329b5ed95d..b957add4ca 100644 --- a/backend/services/system-setting/src/test/java/io/metersphere/system/controller/PluginControllerTests.java +++ b/backend/services/system-setting/src/test/java/io/metersphere/system/controller/PluginControllerTests.java @@ -161,6 +161,19 @@ public class PluginControllerTests extends BaseTest { getDefaultMultiPartParam(request, myDriver)); Assertions.assertEquals(jdbcDriverPluginService.getJdbcDriverClass(DEFAULT_ORGANIZATION_ID), Arrays.asList("io.jianxing.MyDriver", "com.mysql.cj.jdbc.Driver")); + + // 校验QUOTA动上传成功 + request.setName("cloud-quota-plugin"); + request.setOrganizationIds(Arrays.asList(org.getId())); + File quota = new File( + this.getClass().getClassLoader().getResource("file/cloud-quota-plugin-3.x.jar") + .getPath() + ); + this.requestMultipartWithOkAndReturn(DEFAULT_ADD, + getDefaultMultiPartParam(request, quota)); + // 清理掉 + this.requestGetWithOk(DEFAULT_DELETE, "cloud-quota-plugin"); + // @@重名校验异常 // 校验插件名称重名 assertErrorCode(this.requestMultipart(DEFAULT_ADD, diff --git a/backend/services/system-setting/src/test/resources/file/cloud-quota-plugin-3.x.jar b/backend/services/system-setting/src/test/resources/file/cloud-quota-plugin-3.x.jar new file mode 100644 index 0000000000000000000000000000000000000000..f433ca25cb6cd62b2b912cbbd84a3c73c77d7423 GIT binary patch literal 2132971 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