From 46e1f99727433d024057e465164e3bbda2115536 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=87=E6=B9=98=E6=8C=AF=E5=AE=87?= Date: Tue, 4 Oct 2022 22:13:56 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=B7=BB=E5=8A=A0=E6=89=A9=E5=B1=95=E7=9A=84=E7=99=BD?= =?UTF-8?q?=E5=90=8D=E5=8D=95=E9=85=8D=E7=BD=AE=EF=BC=88=E9=99=8D=E4=BD=8E?= =?UTF-8?q?=E5=AF=B9=E8=8B=A5=E4=BE=9D=E6=A1=86=E6=9E=B6=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/quartz/controller/SysJobController.java | 8 ++++++-- .../java/com/ruoyi/quartz/util/ScheduleUtils.java | 15 ++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java index 6cbe3114b..a9a6b5577 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java @@ -4,6 +4,7 @@ import java.util.List; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.quartz.SchedulerException; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.annotation.Validated; @@ -37,6 +38,9 @@ import com.ruoyi.quartz.util.ScheduleUtils; public class SysJobController extends BaseController { private String prefix = "monitor/job"; + + @Value("${job.whiteList:}") + private List whiteList; @Autowired private ISysJobService jobService; @@ -153,7 +157,7 @@ public class SysJobController extends BaseController { return error("新增任务'" + job.getJobName() + "'失败,目标字符串存在违规"); } - else if (!ScheduleUtils.whiteList(job.getInvokeTarget())) + else if (!ScheduleUtils.whiteList(job.getInvokeTarget(), whiteList.toArray(new String[whiteList.size()]))) { return error("新增任务'" + job.getJobName() + "'失败,目标字符串不在白名单内"); } @@ -201,7 +205,7 @@ public class SysJobController extends BaseController { return error("修改任务'" + job.getJobName() + "'失败,目标字符串存在违规"); } - else if (!ScheduleUtils.whiteList(job.getInvokeTarget())) + else if (!ScheduleUtils.whiteList(job.getInvokeTarget(), whiteList.toArray(new String[whiteList.size()]))) { return error("修改任务'" + job.getJobName() + "'失败,目标字符串不在白名单内"); } diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java index 100e22adb..111b31152 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java @@ -1,5 +1,6 @@ package com.ruoyi.quartz.util; +import org.apache.commons.lang3.ArrayUtils; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.Job; @@ -123,17 +124,21 @@ public class ScheduleUtils * 检查包名是否为白名单配置 * * @param invokeTarget 目标字符串 + * @param extendedWhiteList 扩展的名单单 * @return 结果 */ - public static boolean whiteList(String invokeTarget) - { + public static boolean whiteList(String invokeTarget, String... extendedWhiteList) + { + String[] whiteList = StringUtils.isEmpty(extendedWhiteList) ? Constants.JOB_WHITELIST_STR + : ArrayUtils.addAll(extendedWhiteList, Constants.JOB_WHITELIST_STR); String packageName = StringUtils.substringBefore(invokeTarget, "("); int count = StringUtils.countMatches(packageName, "."); if (count > 1) { - return StringUtils.containsAnyIgnoreCase(invokeTarget, Constants.JOB_WHITELIST_STR); + return StringUtils.containsAnyIgnoreCase(invokeTarget, whiteList); } Object obj = SpringUtils.getBean(StringUtils.split(invokeTarget, ".")[0]); - return StringUtils.containsAnyIgnoreCase(obj.getClass().getPackage().getName(), Constants.JOB_WHITELIST_STR); - } + return StringUtils.containsAnyIgnoreCase(obj.getClass().getPackage().getName(), whiteList); + } + } \ No newline at end of file From 8539c5b40ae0225cbbb68dc1cd0629b9c70aa007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=87=E6=B9=98=E6=8C=AF=E5=AE=87?= Date: Sun, 30 Apr 2023 10:50:04 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=BD=93=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E4=BB=BB=E5=8A=A1=E8=B0=83=E7=94=A8=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E6=89=80=E5=9C=A8=E7=9A=84Bean=E6=98=AF=E4=B8=80=E4=B8=AAAOP?= =?UTF-8?q?=E4=BB=A3=E7=90=86=E7=B1=BB=E6=97=B6=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=88=96=E4=BF=AE=E6=94=B9=E8=AF=A5=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E9=85=8D=E7=BD=AE=E4=BC=9A=E5=87=BA=E7=8E=B0=E7=A9=BA?= =?UTF-8?q?=E6=8C=87=E9=92=88=E5=BC=82=E5=B8=B8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java index a87ad86ea..d6936db75 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java @@ -11,6 +11,8 @@ import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.TriggerBuilder; import org.quartz.TriggerKey; +import org.springframework.aop.support.AopUtils; + import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.ScheduleConstants; import com.ruoyi.common.exception.job.TaskException; @@ -138,8 +140,12 @@ public class ScheduleUtils return StringUtils.containsAnyIgnoreCase(invokeTarget, whiteList); } Object obj = SpringUtils.getBean(StringUtils.split(invokeTarget, ".")[0]); + if (AopUtils.isAopProxy(obj)) { + obj = AopUtils.getTargetClass(obj); + } String beanPackageName = obj.getClass().getPackage().getName(); return StringUtils.containsAnyIgnoreCase(beanPackageName, whiteList) && !StringUtils.containsAnyIgnoreCase(beanPackageName, Constants.JOB_ERROR_STR); } + } \ No newline at end of file