From 6fa72373f2e81324e877ef375291c1e4a7ccb2cb Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Sun, 24 Aug 2025 14:29:53 +0800 Subject: [PATCH] =?UTF-8?q?refactor(xxl-job):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E5=92=8C=E6=9D=83=E9=99=90?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用 ReturnT.ofFail() 替代 new ReturnT(ReturnT.FAIL_CODE, ...) 来返回错误信息 - 将权限验证相关方法移至 JobGroupPermissionUtil工具类中 - 优化了多个控制器中的错误处理和权限验证逻辑 - 统一了错误消息的返回格式 --- .../controller/biz/JobApiController.java | 14 +-- .../controller/biz/JobCodeController.java | 11 ++- .../controller/biz/JobGroupController.java | 30 +++--- .../controller/biz/JobInfoController.java | 58 ++--------- .../controller/biz/JobLogController.java | 25 ++--- .../controller/biz/JobUserController.java | 12 +-- .../route/strategy/ExecutorRouteBusyover.java | 4 +- .../route/strategy/ExecutorRouteFailover.java | 4 +- .../scheduler/thread/JobCompleteHelper.java | 4 +- .../scheduler/thread/JobRegistryHelper.java | 4 +- .../scheduler/trigger/XxlJobTrigger.java | 6 +- .../admin/service/impl/XxlJobServiceImpl.java | 89 +++++++++-------- .../com/xxl/job/admin/util/CookieUtil.java | 98 ------------------- .../admin/util/JobGroupPermissionUtil.java | 64 ++++++++++++ .../xxl/job/admin/util/old/CookieUtil.java | 98 +++++++++++++++++++ .../job/core/biz/impl/ExecutorBizImpl.java | 10 +- .../com/xxl/job/core/server/EmbedServer.java | 10 +- .../com/xxl/job/core/thread/JobThread.java | 2 +- .../xxl/job/core/util/XxlJobRemotingUtil.java | 6 +- 19 files changed, 284 insertions(+), 265 deletions(-) delete mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/util/CookieUtil.java create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/util/JobGroupPermissionUtil.java create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/util/old/CookieUtil.java diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobApiController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobApiController.java index c4e1bd31..ad3f186d 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobApiController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobApiController.java @@ -7,6 +7,7 @@ import com.xxl.job.core.biz.model.RegistryParam; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.util.XxlJobRemotingUtil; import com.xxl.sso.core.annotation.XxlSso; +import com.xxl.tool.core.StringTool; import com.xxl.tool.gson.GsonTool; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; @@ -42,15 +43,14 @@ public class JobApiController { // valid if (!"POST".equalsIgnoreCase(request.getMethod())) { - return new ReturnT(ReturnT.FAIL_CODE, "invalid request, HttpMethod not support."); + return ReturnT.ofFail("invalid request, HttpMethod not support."); } - if (uri==null || uri.trim().length()==0) { - return new ReturnT(ReturnT.FAIL_CODE, "invalid request, uri-mapping empty."); + if (StringTool.isBlank(uri)) { + return ReturnT.ofFail("invalid request, uri-mapping empty."); } - if (XxlJobAdminConfig.getAdminConfig().getAccessToken()!=null - && XxlJobAdminConfig.getAdminConfig().getAccessToken().trim().length()>0 + if (StringTool.isNotBlank(XxlJobAdminConfig.getAdminConfig().getAccessToken()) && !XxlJobAdminConfig.getAdminConfig().getAccessToken().equals(request.getHeader(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN))) { - return new ReturnT(ReturnT.FAIL_CODE, "The access token is wrong."); + return ReturnT.ofFail("The access token is wrong."); } // services mapping @@ -64,7 +64,7 @@ public class JobApiController { RegistryParam registryParam = GsonTool.fromJson(data, RegistryParam.class); return adminBiz.registryRemove(registryParam); } else { - return new ReturnT(ReturnT.FAIL_CODE, "invalid request, uri-mapping("+ uri +") not found."); + return ReturnT.ofFail("invalid request, uri-mapping("+ uri +") not found."); } } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobCodeController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobCodeController.java index a47d7362..c288290a 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobCodeController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobCodeController.java @@ -5,6 +5,7 @@ import com.xxl.job.admin.mapper.XxlJobLogGlueMapper; import com.xxl.job.admin.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobLogGlue; import com.xxl.job.admin.util.I18nUtil; +import com.xxl.job.admin.util.JobGroupPermissionUtil; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.glue.GlueTypeEnum; import jakarta.annotation.Resource; @@ -44,7 +45,7 @@ public class JobCodeController { } // valid jobGroup permission - JobInfoController.validJobGroupPermission(request, jobInfo.getJobGroup()); + JobGroupPermissionUtil.validJobGroupPermission(request, jobInfo.getJobGroup()); // Glue类型-字典 model.addAttribute("GlueTypeEnum", GlueTypeEnum.values()); @@ -63,18 +64,18 @@ public class JobCodeController { // valid if (glueRemark==null) { - return new ReturnT(500, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_glue_remark")) ); + return ReturnT.ofFail( (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_glue_remark")) ); } if (glueRemark.length()<4 || glueRemark.length()>100) { - return new ReturnT(500, I18nUtil.getString("jobinfo_glue_remark_limit")); + return ReturnT.ofFail(I18nUtil.getString("jobinfo_glue_remark_limit")); } XxlJobInfo existsJobInfo = xxlJobInfoMapper.loadById(id); if (existsJobInfo == null) { - return new ReturnT(500, I18nUtil.getString("jobinfo_glue_jobid_unvalid")); + return ReturnT.ofFail( I18nUtil.getString("jobinfo_glue_jobid_unvalid")); } // valid jobGroup permission - JobInfoController.validJobGroupPermission(request, existsJobInfo.getJobGroup()); + JobGroupPermissionUtil.validJobGroupPermission(request, existsJobInfo.getJobGroup()); // update new code existsJobInfo.setGlueSource(glueSource); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobGroupController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobGroupController.java index 5468288c..45f04f55 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobGroupController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobGroupController.java @@ -69,32 +69,32 @@ public class JobGroupController { // valid if (xxlJobGroup.getAppname()==null || xxlJobGroup.getAppname().trim().length()==0) { - return new ReturnT(500, (I18nUtil.getString("system_please_input")+"AppName") ); + return ReturnT.ofFail((I18nUtil.getString("system_please_input")+"AppName") ); } if (xxlJobGroup.getAppname().length()<4 || xxlJobGroup.getAppname().length()>64) { - return new ReturnT(500, I18nUtil.getString("jobgroup_field_appname_length") ); + return ReturnT.ofFail( I18nUtil.getString("jobgroup_field_appname_length") ); } if (xxlJobGroup.getAppname().contains(">") || xxlJobGroup.getAppname().contains("<")) { - return new ReturnT(500, "AppName"+I18nUtil.getString("system_unvalid") ); + return ReturnT.ofFail( "AppName"+I18nUtil.getString("system_unvalid") ); } if (xxlJobGroup.getTitle()==null || xxlJobGroup.getTitle().trim().length()==0) { - return new ReturnT(500, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobgroup_field_title")) ); + return ReturnT.ofFail((I18nUtil.getString("system_please_input") + I18nUtil.getString("jobgroup_field_title")) ); } if (xxlJobGroup.getTitle().contains(">") || xxlJobGroup.getTitle().contains("<")) { - return new ReturnT(500, I18nUtil.getString("jobgroup_field_title")+I18nUtil.getString("system_unvalid") ); + return ReturnT.ofFail(I18nUtil.getString("jobgroup_field_title")+I18nUtil.getString("system_unvalid") ); } if (xxlJobGroup.getAddressType()!=0) { if (xxlJobGroup.getAddressList()==null || xxlJobGroup.getAddressList().trim().length()==0) { - return new ReturnT(500, I18nUtil.getString("jobgroup_field_addressType_limit") ); + return ReturnT.ofFail( I18nUtil.getString("jobgroup_field_addressType_limit") ); } if (xxlJobGroup.getAddressList().contains(">") || xxlJobGroup.getAddressList().contains("<")) { - return new ReturnT(500, I18nUtil.getString("jobgroup_field_registryList")+I18nUtil.getString("system_unvalid") ); + return ReturnT.ofFail(I18nUtil.getString("jobgroup_field_registryList")+I18nUtil.getString("system_unvalid") ); } String[] addresss = xxlJobGroup.getAddressList().split(","); for (String item: addresss) { if (item==null || item.trim().length()==0) { - return new ReturnT(500, I18nUtil.getString("jobgroup_field_registryList_unvalid") ); + return ReturnT.ofFail( I18nUtil.getString("jobgroup_field_registryList_unvalid") ); } } } @@ -112,13 +112,13 @@ public class JobGroupController { public ReturnT update(XxlJobGroup xxlJobGroup){ // valid if (xxlJobGroup.getAppname()==null || xxlJobGroup.getAppname().trim().length()==0) { - return new ReturnT(500, (I18nUtil.getString("system_please_input")+"AppName") ); + return ReturnT.ofFail((I18nUtil.getString("system_please_input")+"AppName") ); } if (xxlJobGroup.getAppname().length()<4 || xxlJobGroup.getAppname().length()>64) { - return new ReturnT(500, I18nUtil.getString("jobgroup_field_appname_length") ); + return ReturnT.ofFail( I18nUtil.getString("jobgroup_field_appname_length") ); } if (xxlJobGroup.getTitle()==null || xxlJobGroup.getTitle().trim().length()==0) { - return new ReturnT(500, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobgroup_field_title")) ); + return ReturnT.ofFail( (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobgroup_field_title")) ); } if (xxlJobGroup.getAddressType() == 0) { // 0=自动注册 @@ -136,12 +136,12 @@ public class JobGroupController { } else { // 1=手动录入 if (xxlJobGroup.getAddressList()==null || xxlJobGroup.getAddressList().trim().length()==0) { - return new ReturnT(500, I18nUtil.getString("jobgroup_field_addressType_limit") ); + return ReturnT.ofFail( I18nUtil.getString("jobgroup_field_addressType_limit") ); } String[] addresss = xxlJobGroup.getAddressList().split(","); for (String item: addresss) { if (item==null || item.trim().length()==0) { - return new ReturnT(500, I18nUtil.getString("jobgroup_field_registryList_unvalid") ); + return ReturnT.ofFail(I18nUtil.getString("jobgroup_field_registryList_unvalid") ); } } } @@ -183,12 +183,12 @@ public class JobGroupController { // valid int count = xxlJobInfoMapper.pageListCount(0, 10, id, -1, null, null, null); if (count > 0) { - return new ReturnT(500, I18nUtil.getString("jobgroup_del_limit_0") ); + return ReturnT.ofFail( I18nUtil.getString("jobgroup_del_limit_0") ); } List allList = xxlJobGroupMapper.findAll(); if (allList.size() == 1) { - return new ReturnT(500, I18nUtil.getString("jobgroup_del_limit_1") ); + return ReturnT.ofFail( I18nUtil.getString("jobgroup_del_limit_1") ); } int ret = xxlJobGroupMapper.remove(id); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobInfoController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobInfoController.java index 94b7de34..a78cbac9 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobInfoController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobInfoController.java @@ -1,6 +1,5 @@ package com.xxl.job.admin.controller.biz; -import com.xxl.job.admin.constant.Consts; import com.xxl.job.admin.mapper.XxlJobGroupMapper; import com.xxl.job.admin.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobInfo; @@ -11,6 +10,7 @@ import com.xxl.job.admin.scheduler.scheduler.ScheduleTypeEnum; import com.xxl.job.admin.scheduler.thread.JobScheduleHelper; import com.xxl.job.admin.service.XxlJobService; import com.xxl.job.admin.util.I18nUtil; +import com.xxl.job.admin.util.JobGroupPermissionUtil; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.enums.ExecutorBlockStrategyEnum; import com.xxl.job.core.glue.GlueTypeEnum; @@ -62,7 +62,7 @@ public class JobInfoController { List jobGroupListTotal = xxlJobGroupMapper.findAll(); // filter group - List jobGroupList = filterJobGroupByPermission(request, jobGroupListTotal); + List jobGroupList = JobGroupPermissionUtil.filterJobGroupByPermission(request, jobGroupListTotal); if (jobGroupList==null || jobGroupList.isEmpty()) { throw new XxlJobException(I18nUtil.getString("jobgroup_empty")); } @@ -85,7 +85,7 @@ public class JobInfoController { @RequestParam("author") String author) { // valid jobGroup permission - validJobGroupPermission(request, jobGroup); + JobGroupPermissionUtil.validJobGroupPermission(request, jobGroup); // page return xxlJobService.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author); @@ -95,7 +95,7 @@ public class JobInfoController { @ResponseBody public ReturnT add(HttpServletRequest request, XxlJobInfo jobInfo) { // valid permission - LoginInfo loginInfo = validJobGroupPermission(request, jobInfo.getJobGroup()); + LoginInfo loginInfo = JobGroupPermissionUtil.validJobGroupPermission(request, jobInfo.getJobGroup()); // opt return xxlJobService.add(jobInfo, loginInfo); @@ -105,7 +105,7 @@ public class JobInfoController { @ResponseBody public ReturnT update(HttpServletRequest request, XxlJobInfo jobInfo) { // valid permission - LoginInfo loginInfo = validJobGroupPermission(request, jobInfo.getJobGroup()); + LoginInfo loginInfo = JobGroupPermissionUtil.validJobGroupPermission(request, jobInfo.getJobGroup()); // opt return xxlJobService.update(jobInfo, loginInfo); @@ -164,56 +164,10 @@ public class JobInfoController { } } catch (Exception e) { logger.error("nextTriggerTime error. scheduleType = {}, scheduleConf= {}", scheduleType, scheduleConf, e); - return new ReturnT>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) + e.getMessage()); + return ReturnT.ofFail((I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) + e.getMessage()); } return ReturnT.ofSuccess(result); } - - // -------------------- tool -------------------- - - /** - * check if has jobgroup permission - */ - public static boolean hasJobGroupPermission(LoginInfo loginInfo, int jobGroup){ - if (XxlSsoHelper.hasRole(loginInfo, Consts.ADMIN_ROLE).isSuccess()) { - return true; - } else { - List jobGroups = (loginInfo.getExtraInfo()!=null && loginInfo.getExtraInfo().containsKey("jobGroups")) - ? List.of(StringTool.tokenizeToArray(loginInfo.getExtraInfo().get("jobGroups"), ",")) :new ArrayList<>(); - return jobGroups.contains(String.valueOf(jobGroup)); - } - } - - /** - * valid jobGroup permission - */ - public static LoginInfo validJobGroupPermission(HttpServletRequest request, int jobGroup) { - Response loginInfoResponse = XxlSsoHelper.loginCheckWithAttr(request); - if (!(loginInfoResponse.isSuccess() && hasJobGroupPermission(loginInfoResponse.getData(), jobGroup))) { - throw new RuntimeException(I18nUtil.getString("system_permission_limit") + "[username="+ loginInfoResponse.getData().getUserName() +"]"); - } - return loginInfoResponse.getData(); - } - - /** - * filter jobGroupList by permission - */ - public static List filterJobGroupByPermission(HttpServletRequest request, List jobGroupListTotal){ - Response loginInfoResponse = XxlSsoHelper.loginCheckWithAttr(request); - - if (XxlSsoHelper.hasRole(loginInfoResponse.getData(), Consts.ADMIN_ROLE).isSuccess()) { - return jobGroupListTotal; - } else { - List jobGroups = (loginInfoResponse.getData().getExtraInfo()!=null && loginInfoResponse.getData().getExtraInfo().containsKey("jobGroups")) - ? List.of(StringTool.tokenizeToArray(loginInfoResponse.getData().getExtraInfo().get("jobGroups"), ",")) :new ArrayList<>(); - - return jobGroupListTotal - .stream() - .filter(jobGroup -> jobGroups.contains(String.valueOf(jobGroup.getId()))) - .toList(); - } - } - } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobLogController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobLogController.java index a7576e08..7f53f3b0 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobLogController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobLogController.java @@ -10,6 +10,7 @@ import com.xxl.job.admin.scheduler.complete.XxlJobCompleter; import com.xxl.job.admin.scheduler.exception.XxlJobException; import com.xxl.job.admin.scheduler.scheduler.XxlJobScheduler; import com.xxl.job.admin.util.I18nUtil; +import com.xxl.job.admin.util.JobGroupPermissionUtil; import com.xxl.job.core.biz.ExecutorBiz; import com.xxl.job.core.biz.model.KillParam; import com.xxl.job.core.biz.model.LogParam; @@ -57,7 +58,7 @@ public class JobLogController { // find jobGroup List jobGroupListTotal = xxlJobGroupMapper.findAll(); // filter jobGroup - List jobGroupList = JobInfoController.filterJobGroupByPermission(request, jobGroupListTotal); + List jobGroupList = JobGroupPermissionUtil.filterJobGroupByPermission(request, jobGroupListTotal); if (jobGroupList==null || jobGroupList.isEmpty()) { throw new XxlJobException(I18nUtil.getString("jobgroup_empty")); } @@ -76,7 +77,7 @@ public class JobLogController { } jobGroup = jobGroup > 0 ? jobGroup : jobGroupList.get(0).getId(); // valid permission - JobInfoController.validJobGroupPermission(request, jobGroup); + JobGroupPermissionUtil.validJobGroupPermission(request, jobGroup); // find jobList List jobInfoList = xxlJobInfoMapper.getJobsByGroup(jobGroup); @@ -112,7 +113,7 @@ public class JobLogController { @RequestParam("filterTime") String filterTime) { // valid jobGroup permission - JobInfoController.validJobGroupPermission(request, jobGroup); + JobGroupPermissionUtil.validJobGroupPermission(request, jobGroup); // parse param Date triggerTimeStart = null; @@ -147,7 +148,7 @@ public class JobLogController { } // valid permission - JobInfoController.validJobGroupPermission(request, jobLog.getJobGroup()); + JobGroupPermissionUtil.validJobGroupPermission(request, jobLog.getJobGroup()); // data model.addAttribute("triggerCode", jobLog.getTriggerCode()); @@ -163,7 +164,7 @@ public class JobLogController { // valid XxlJobLog jobLog = xxlJobLogMapper.load(logId); // todo, need to improve performance if (jobLog == null) { - return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_logid_unvalid")); + return ReturnT.ofFail(I18nUtil.getString("joblog_logid_unvalid")); } // log cat @@ -186,7 +187,7 @@ public class JobLogController { return logResult; } catch (Exception e) { logger.error(e.getMessage(), e); - return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); + return ReturnT.ofFail(e.getMessage()); } } @@ -229,14 +230,14 @@ public class JobLogController { XxlJobLog log = xxlJobLogMapper.load(id); XxlJobInfo jobInfo = xxlJobInfoMapper.loadById(log.getJobId()); if (jobInfo==null) { - return new ReturnT(500, I18nUtil.getString("jobinfo_glue_jobid_unvalid")); + return ReturnT.ofFail(I18nUtil.getString("jobinfo_glue_jobid_unvalid")); } if (ReturnT.SUCCESS_CODE != log.getTriggerCode()) { - return new ReturnT(500, I18nUtil.getString("joblog_kill_log_limit")); + return ReturnT.ofFail( I18nUtil.getString("joblog_kill_log_limit")); } // valid JobGroup permission - JobInfoController.validJobGroupPermission(request, jobInfo.getJobGroup()); + JobGroupPermissionUtil.validJobGroupPermission(request, jobInfo.getJobGroup()); // request of kill ReturnT runResult = null; @@ -245,7 +246,7 @@ public class JobLogController { runResult = executorBiz.kill(new KillParam(jobInfo.getId())); } catch (Exception e) { logger.error(e.getMessage(), e); - runResult = new ReturnT(500, e.getMessage()); + runResult = ReturnT.ofFail( e.getMessage()); } if (ReturnT.SUCCESS_CODE == runResult.getCode()) { @@ -266,7 +267,7 @@ public class JobLogController { @RequestParam("jobId") int jobId, @RequestParam("type") int type){ // valid JobGroup permission - JobInfoController.validJobGroupPermission(request, jobGroup); + JobGroupPermissionUtil.validJobGroupPermission(request, jobGroup); // opt Date clearBeforeTime = null; @@ -290,7 +291,7 @@ public class JobLogController { } else if (type == 9) { clearBeforeNum = 0; // 清理所有日志数据 } else { - return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_clean_type_unvalid")); + return ReturnT.ofFail(I18nUtil.getString("joblog_clean_type_unvalid")); } List logIds = null; diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobUserController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobUserController.java index 674e6871..76814caa 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobUserController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobUserController.java @@ -82,19 +82,19 @@ public class JobUserController { // valid username if (!StringUtils.hasText(xxlJobUser.getUsername())) { - return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("system_please_input")+I18nUtil.getString("user_username") ); + return ReturnT.ofFail(I18nUtil.getString("system_please_input")+I18nUtil.getString("user_username") ); } xxlJobUser.setUsername(xxlJobUser.getUsername().trim()); if (!(xxlJobUser.getUsername().length()>=4 && xxlJobUser.getUsername().length()<=20)) { - return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("system_lengh_limit")+"[4-20]" ); + return ReturnT.ofFail(I18nUtil.getString("system_lengh_limit")+"[4-20]" ); } // valid password if (!StringUtils.hasText(xxlJobUser.getPassword())) { - return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("system_please_input")+I18nUtil.getString("user_password") ); + return ReturnT.ofFail(I18nUtil.getString("system_please_input")+I18nUtil.getString("user_password") ); } xxlJobUser.setPassword(xxlJobUser.getPassword().trim()); if (!(xxlJobUser.getPassword().length()>=4 && xxlJobUser.getPassword().length()<=20)) { - return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("system_lengh_limit")+"[4-20]" ); + return ReturnT.ofFail(I18nUtil.getString("system_lengh_limit")+"[4-20]" ); } // md5 password String passwordHash = SHA256Tool.sha256(xxlJobUser.getPassword()); @@ -103,7 +103,7 @@ public class JobUserController { // check repeat XxlJobUser existUser = xxlJobUserMapper.loadByUserName(xxlJobUser.getUsername()); if (existUser != null) { - return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("user_username_repeat") ); + return ReturnT.ofFail( I18nUtil.getString("user_username_repeat") ); } // write @@ -126,7 +126,7 @@ public class JobUserController { if (StringUtils.hasText(xxlJobUser.getPassword())) { xxlJobUser.setPassword(xxlJobUser.getPassword().trim()); if (!(xxlJobUser.getPassword().length()>=4 && xxlJobUser.getPassword().length()<=20)) { - return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("system_lengh_limit")+"[4-20]" ); + return ReturnT.ofFail(I18nUtil.getString("system_lengh_limit")+"[4-20]" ); } // md5 password String passwordHash = SHA256Tool.sha256(xxlJobUser.getPassword()); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteBusyover.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteBusyover.java index d3dd51cd..471e4fe5 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteBusyover.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteBusyover.java @@ -26,7 +26,7 @@ public class ExecutorRouteBusyover extends ExecutorRouter { idleBeatResult = executorBiz.idleBeat(new IdleBeatParam(triggerParam.getJobId())); } catch (Exception e) { logger.error(e.getMessage(), e); - idleBeatResult = new ReturnT(ReturnT.FAIL_CODE, ""+e ); + idleBeatResult = ReturnT.ofFail( ""+e ); } idleBeatResultSB.append( (idleBeatResultSB.length()>0)?"

":"") .append(I18nUtil.getString("jobconf_idleBeat") + ":") @@ -42,7 +42,7 @@ public class ExecutorRouteBusyover extends ExecutorRouter { } } - return new ReturnT(ReturnT.FAIL_CODE, idleBeatResultSB.toString()); + return ReturnT.ofFail( idleBeatResultSB.toString()); } } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteFailover.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteFailover.java index 84792e20..5c626b49 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteFailover.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteFailover.java @@ -26,7 +26,7 @@ public class ExecutorRouteFailover extends ExecutorRouter { beatResult = executorBiz.beat(); } catch (Exception e) { logger.error(e.getMessage(), e); - beatResult = new ReturnT(ReturnT.FAIL_CODE, ""+e ); + beatResult = ReturnT.ofFail(e.getMessage() ); } beatResultSB.append( (beatResultSB.length()>0)?"

":"") .append(I18nUtil.getString("jobconf_beat") + ":") @@ -42,7 +42,7 @@ public class ExecutorRouteFailover extends ExecutorRouter { return beatResult; } } - return new ReturnT(ReturnT.FAIL_CODE, beatResultSB.toString()); + return ReturnT.ofFail( beatResultSB.toString()); } } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobCompleteHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobCompleteHelper.java index abd2fa38..3cacbdc5 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobCompleteHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobCompleteHelper.java @@ -155,10 +155,10 @@ public class JobCompleteHelper { // valid log item XxlJobLog log = XxlJobAdminConfig.getAdminConfig().getXxlJobLogMapper().load(handleCallbackParam.getLogId()); if (log == null) { - return new ReturnT(ReturnT.FAIL_CODE, "log item not found."); + return ReturnT.ofFail( "log item not found."); } if (log.getHandleCode() > 0) { - return new ReturnT(ReturnT.FAIL_CODE, "log repeate callback."); // avoid repeat callback, trigger child job etc + return ReturnT.ofFail("log repeate callback."); // avoid repeat callback, trigger child job etc } // handle msg diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobRegistryHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobRegistryHelper.java index 912ce50c..cf36ba3c 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobRegistryHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobRegistryHelper.java @@ -152,7 +152,7 @@ public class JobRegistryHelper { if (!StringUtils.hasText(registryParam.getRegistryGroup()) || !StringUtils.hasText(registryParam.getRegistryKey()) || !StringUtils.hasText(registryParam.getRegistryValue())) { - return new ReturnT(ReturnT.FAIL_CODE, "Illegal Argument."); + return ReturnT.ofFail("Illegal Argument."); } // async execute @@ -184,7 +184,7 @@ public class JobRegistryHelper { if (!StringUtils.hasText(registryParam.getRegistryGroup()) || !StringUtils.hasText(registryParam.getRegistryKey()) || !StringUtils.hasText(registryParam.getRegistryValue())) { - return new ReturnT(ReturnT.FAIL_CODE, "Illegal Argument."); + return ReturnT.ofFail("Illegal Argument."); } // async execute diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/trigger/XxlJobTrigger.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/trigger/XxlJobTrigger.java index e322c88c..4dcfb0d9 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/trigger/XxlJobTrigger.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/trigger/XxlJobTrigger.java @@ -155,7 +155,7 @@ public class XxlJobTrigger { } } } else { - routeAddressResult = new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("jobconf_trigger_address_empty")); + routeAddressResult = ReturnT.ofFail( I18nUtil.getString("jobconf_trigger_address_empty")); } // 4、trigger remote executor @@ -163,7 +163,7 @@ public class XxlJobTrigger { if (address != null) { triggerResult = runExecutor(triggerParam, address); } else { - triggerResult = new ReturnT(ReturnT.FAIL_CODE, null); + triggerResult = ReturnT.ofFail(null); } // 5、collection trigger info @@ -211,7 +211,7 @@ public class XxlJobTrigger { runResult = executorBiz.run(triggerParam); } catch (Exception e) { logger.error(">>>>>>>>>>> xxl-job trigger error, please check if the executor[{}] is running.", address, e); - runResult = new ReturnT(ReturnT.FAIL_CODE, ThrowableUtil.toString(e)); + runResult = ReturnT.ofFail(ThrowableUtil.toString(e)); } StringBuffer runResultSB = new StringBuffer(I18nUtil.getString("jobconf_trigger_run") + ":"); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java index 64fc871b..931e2249 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java @@ -1,11 +1,9 @@ package com.xxl.job.admin.service.impl; -import com.xxl.job.admin.controller.biz.JobInfoController; import com.xxl.job.admin.mapper.*; import com.xxl.job.admin.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobLogReport; -import com.xxl.job.admin.model.XxlJobUser; import com.xxl.job.admin.scheduler.cron.CronExpression; import com.xxl.job.admin.scheduler.route.ExecutorRouteStrategyEnum; import com.xxl.job.admin.scheduler.scheduler.MisfireStrategyEnum; @@ -15,6 +13,7 @@ import com.xxl.job.admin.scheduler.thread.JobTriggerPoolHelper; import com.xxl.job.admin.scheduler.trigger.TriggerTypeEnum; import com.xxl.job.admin.service.XxlJobService; import com.xxl.job.admin.util.I18nUtil; +import com.xxl.job.admin.util.JobGroupPermissionUtil; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.enums.ExecutorBlockStrategyEnum; import com.xxl.job.core.glue.GlueTypeEnum; @@ -68,44 +67,44 @@ public class XxlJobServiceImpl implements XxlJobService { // valid base XxlJobGroup group = xxlJobGroupMapper.load(jobInfo.getJobGroup()); if (group == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_choose")+I18nUtil.getString("jobinfo_field_jobgroup")) ); + return ReturnT.ofFail (I18nUtil.getString("system_please_choose")+I18nUtil.getString("jobinfo_field_jobgroup")); } if (jobInfo.getJobDesc()==null || jobInfo.getJobDesc().trim().length()==0) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_jobdesc")) ); + return ReturnT.ofFail ( (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_jobdesc")) ); } if (jobInfo.getAuthor()==null || jobInfo.getAuthor().trim().length()==0) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_author")) ); + return ReturnT.ofFail ( (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_author")) ); } // valid trigger ScheduleTypeEnum scheduleTypeEnum = ScheduleTypeEnum.match(jobInfo.getScheduleType(), null); if (scheduleTypeEnum == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); } if (scheduleTypeEnum == ScheduleTypeEnum.CRON) { if (jobInfo.getScheduleConf()==null || !CronExpression.isValidExpression(jobInfo.getScheduleConf())) { - return new ReturnT(ReturnT.FAIL_CODE, "Cron"+I18nUtil.getString("system_unvalid")); + return ReturnT.ofFail ( "Cron"+I18nUtil.getString("system_unvalid")); } } else if (scheduleTypeEnum == ScheduleTypeEnum.FIX_RATE/* || scheduleTypeEnum == ScheduleTypeEnum.FIX_DELAY*/) { if (jobInfo.getScheduleConf() == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")) ); + return ReturnT.ofFail ( (I18nUtil.getString("schedule_type")) ); } try { int fixSecond = Integer.valueOf(jobInfo.getScheduleConf()); if (fixSecond < 1) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); } } catch (Exception e) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); } } // valid job if (GlueTypeEnum.match(jobInfo.getGlueType()) == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_gluetype")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("jobinfo_field_gluetype")+I18nUtil.getString("system_unvalid")) ); } if (GlueTypeEnum.BEAN==GlueTypeEnum.match(jobInfo.getGlueType()) && (jobInfo.getExecutorHandler()==null || jobInfo.getExecutorHandler().trim().length()==0) ) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+"JobHandler") ); + return ReturnT.ofFail ( (I18nUtil.getString("system_please_input")+"JobHandler") ); } // 》fix "\r" in shell if (GlueTypeEnum.GLUE_SHELL==GlueTypeEnum.match(jobInfo.getGlueType()) && jobInfo.getGlueSource()!=null) { @@ -114,13 +113,13 @@ public class XxlJobServiceImpl implements XxlJobService { // valid advanced if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("jobinfo_field_executorRouteStrategy")+I18nUtil.getString("system_unvalid")) ); } if (MisfireStrategyEnum.match(jobInfo.getMisfireStrategy(), null) == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("misfire_strategy")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("misfire_strategy")+I18nUtil.getString("system_unvalid")) ); } if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("jobinfo_field_executorBlockStrategy")+I18nUtil.getString("system_unvalid")) ); } // 》ChildJobId valid @@ -130,16 +129,16 @@ public class XxlJobServiceImpl implements XxlJobService { if (childJobIdItem!=null && childJobIdItem.trim().length()>0 && isNumeric(childJobIdItem)) { XxlJobInfo childJobInfo = xxlJobInfoMapper.loadById(Integer.parseInt(childJobIdItem)); if (childJobInfo==null) { - return new ReturnT(ReturnT.FAIL_CODE, + return ReturnT.ofFail ( MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_not_found")), childJobIdItem)); } // valid jobGroup permission - if (!JobInfoController.hasJobGroupPermission(loginInfo, childJobInfo.getJobGroup())) { - return new ReturnT(ReturnT.FAIL_CODE, + if (!JobGroupPermissionUtil.hasJobGroupPermission(loginInfo, childJobInfo.getJobGroup())) { + return ReturnT.ofFail ( MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_permission_limit")), childJobIdItem)); } } else { - return new ReturnT(ReturnT.FAIL_CODE, + return ReturnT.ofFail ( MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_unvalid")), childJobIdItem)); } } @@ -162,7 +161,7 @@ public class XxlJobServiceImpl implements XxlJobService { jobInfo.setExecutorHandler(jobInfo.getExecutorHandler().trim()); xxlJobInfoMapper.save(jobInfo); if (jobInfo.getId() < 1) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_add")+I18nUtil.getString("system_fail")) ); + return ReturnT.ofFail ( (I18nUtil.getString("jobinfo_field_add")+I18nUtil.getString("system_fail")) ); } return ReturnT.ofSuccess(String.valueOf(jobInfo.getId())); @@ -182,44 +181,44 @@ public class XxlJobServiceImpl implements XxlJobService { // valid base if (jobInfo.getJobDesc()==null || jobInfo.getJobDesc().trim().length()==0) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_jobdesc")) ); + return ReturnT.ofFail ( (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_jobdesc")) ); } if (jobInfo.getAuthor()==null || jobInfo.getAuthor().trim().length()==0) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_author")) ); + return ReturnT.ofFail ( (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_author")) ); } // valid trigger ScheduleTypeEnum scheduleTypeEnum = ScheduleTypeEnum.match(jobInfo.getScheduleType(), null); if (scheduleTypeEnum == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); } if (scheduleTypeEnum == ScheduleTypeEnum.CRON) { if (jobInfo.getScheduleConf()==null || !CronExpression.isValidExpression(jobInfo.getScheduleConf())) { - return new ReturnT(ReturnT.FAIL_CODE, "Cron"+I18nUtil.getString("system_unvalid") ); + return ReturnT.ofFail ( "Cron"+I18nUtil.getString("system_unvalid") ); } } else if (scheduleTypeEnum == ScheduleTypeEnum.FIX_RATE /*|| scheduleTypeEnum == ScheduleTypeEnum.FIX_DELAY*/) { if (jobInfo.getScheduleConf() == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); } try { int fixSecond = Integer.valueOf(jobInfo.getScheduleConf()); if (fixSecond < 1) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); } } catch (Exception e) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); } } // valid advanced if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("jobinfo_field_executorRouteStrategy")+I18nUtil.getString("system_unvalid")) ); } if (MisfireStrategyEnum.match(jobInfo.getMisfireStrategy(), null) == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("misfire_strategy")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("misfire_strategy")+I18nUtil.getString("system_unvalid")) ); } if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("jobinfo_field_executorBlockStrategy")+I18nUtil.getString("system_unvalid")) ); } // 》ChildJobId valid @@ -230,22 +229,22 @@ public class XxlJobServiceImpl implements XxlJobService { // parse child int childJobId = Integer.parseInt(childJobIdItem); if (childJobId == jobInfo.getId()) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_childJobId")+"("+childJobId+")"+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("jobinfo_field_childJobId")+"("+childJobId+")"+I18nUtil.getString("system_unvalid")) ); } // valid child XxlJobInfo childJobInfo = xxlJobInfoMapper.loadById(childJobId); if (childJobInfo==null) { - return new ReturnT(ReturnT.FAIL_CODE, + return ReturnT.ofFail ( MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_not_found")), childJobIdItem)); } // valid jobGroup permission - if (!JobInfoController.hasJobGroupPermission(loginInfo, childJobInfo.getJobGroup())) { - return new ReturnT(ReturnT.FAIL_CODE, + if (!JobGroupPermissionUtil.hasJobGroupPermission(loginInfo, childJobInfo.getJobGroup())) { + return ReturnT.ofFail ( MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_permission_limit")), childJobIdItem)); } } else { - return new ReturnT(ReturnT.FAIL_CODE, + return ReturnT.ofFail ( MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_unvalid")), childJobIdItem)); } } @@ -263,13 +262,13 @@ public class XxlJobServiceImpl implements XxlJobService { // group valid XxlJobGroup jobGroup = xxlJobGroupMapper.load(jobInfo.getJobGroup()); if (jobGroup == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_jobgroup")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("jobinfo_field_jobgroup")+I18nUtil.getString("system_unvalid")) ); } // stage job info XxlJobInfo exists_jobInfo = xxlJobInfoMapper.loadById(jobInfo.getId()); if (exists_jobInfo == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_id")+I18nUtil.getString("system_not_found")) ); + return ReturnT.ofFail ( (I18nUtil.getString("jobinfo_field_id")+I18nUtil.getString("system_not_found")) ); } // next trigger time (5s后生效,避开预读周期) @@ -279,12 +278,12 @@ public class XxlJobServiceImpl implements XxlJobService { try { Date nextValidTime = JobScheduleHelper.generateNextValidTime(jobInfo, new Date(System.currentTimeMillis() + JobScheduleHelper.PRE_READ_MS)); if (nextValidTime == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); } nextTriggerTime = nextValidTime.getTime(); } catch (Exception e) { logger.error(e.getMessage(), e); - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); } } @@ -321,7 +320,7 @@ public class XxlJobServiceImpl implements XxlJobService { } // valid jobGroup permission - if (!JobInfoController.hasJobGroupPermission(loginInfo, xxlJobInfo.getJobGroup())) { + if (!JobGroupPermissionUtil.hasJobGroupPermission(loginInfo, xxlJobInfo.getJobGroup())) { return ReturnT.ofFail(I18nUtil.getString("system_permission_limit")); } @@ -340,7 +339,7 @@ public class XxlJobServiceImpl implements XxlJobService { } // valid jobGroup permission - if (!JobInfoController.hasJobGroupPermission(loginInfo, xxlJobInfo.getJobGroup())) { + if (!JobGroupPermissionUtil.hasJobGroupPermission(loginInfo, xxlJobInfo.getJobGroup())) { return ReturnT.ofFail(I18nUtil.getString("system_permission_limit")); } @@ -355,12 +354,12 @@ public class XxlJobServiceImpl implements XxlJobService { try { Date nextValidTime = JobScheduleHelper.generateNextValidTime(xxlJobInfo, new Date(System.currentTimeMillis() + JobScheduleHelper.PRE_READ_MS)); if (nextValidTime == null) { - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); } nextTriggerTime = nextValidTime.getTime(); } catch (Exception e) { logger.error(e.getMessage(), e); - return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); + return ReturnT.ofFail ( (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) ); } xxlJobInfo.setTriggerStatus(1); @@ -381,7 +380,7 @@ public class XxlJobServiceImpl implements XxlJobService { } // valid jobGroup permission - if (!JobInfoController.hasJobGroupPermission(loginInfo, xxlJobInfo.getJobGroup())) { + if (!JobGroupPermissionUtil.hasJobGroupPermission(loginInfo, xxlJobInfo.getJobGroup())) { return ReturnT.ofFail(I18nUtil.getString("system_permission_limit")); } @@ -406,7 +405,7 @@ public class XxlJobServiceImpl implements XxlJobService { } // valid jobGroup permission - if (!JobInfoController.hasJobGroupPermission(loginInfo, xxlJobInfo.getJobGroup())) { + if (!JobGroupPermissionUtil.hasJobGroupPermission(loginInfo, xxlJobInfo.getJobGroup())) { return ReturnT.ofFail(I18nUtil.getString("system_permission_limit")); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/util/CookieUtil.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/util/CookieUtil.java deleted file mode 100644 index f71d5d28..00000000 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/util/CookieUtil.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.xxl.job.admin.util; - -import jakarta.servlet.http.Cookie; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -/** - * Cookie.Util - * - * @author xuxueli 2015-12-12 18:01:06 - */ -public class CookieUtil { - - // 默认缓存时间,单位/秒, 2H - private static final int COOKIE_MAX_AGE = Integer.MAX_VALUE; - // 保存路径,根路径 - private static final String COOKIE_PATH = "/"; - - /** - * 保存 - * - * @param response - * @param key - * @param value - * @param ifRemember - */ - public static void set(HttpServletResponse response, String key, String value, boolean ifRemember) { - int age = ifRemember?COOKIE_MAX_AGE:-1; - set(response, key, value, null, COOKIE_PATH, age, true); - } - - /** - * 保存 - * - * @param response - * @param key - * @param value - * @param maxAge - */ - private static void set(HttpServletResponse response, String key, String value, String domain, String path, int maxAge, boolean isHttpOnly) { - Cookie cookie = new Cookie(key, value); - if (domain != null) { - cookie.setDomain(domain); - } - cookie.setPath(path); - cookie.setMaxAge(maxAge); - cookie.setHttpOnly(isHttpOnly); - response.addCookie(cookie); - } - - /** - * 查询value - * - * @param request - * @param key - * @return - */ - public static String getValue(HttpServletRequest request, String key) { - Cookie cookie = get(request, key); - if (cookie != null) { - return cookie.getValue(); - } - return null; - } - - /** - * 查询Cookie - * - * @param request - * @param key - */ - private static Cookie get(HttpServletRequest request, String key) { - Cookie[] arr_cookie = request.getCookies(); - if (arr_cookie != null && arr_cookie.length > 0) { - for (Cookie cookie : arr_cookie) { - if (cookie.getName().equals(key)) { - return cookie; - } - } - } - return null; - } - - /** - * 删除Cookie - * - * @param request - * @param response - * @param key - */ - public static void remove(HttpServletRequest request, HttpServletResponse response, String key) { - Cookie cookie = get(request, key); - if (cookie != null) { - set(response, key, "", null, COOKIE_PATH, 0, true); - } - } - -} \ No newline at end of file diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/util/JobGroupPermissionUtil.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/util/JobGroupPermissionUtil.java new file mode 100644 index 00000000..1859fbe1 --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/util/JobGroupPermissionUtil.java @@ -0,0 +1,64 @@ +package com.xxl.job.admin.util; + +import com.xxl.job.admin.constant.Consts; +import com.xxl.job.admin.model.XxlJobGroup; +import com.xxl.sso.core.helper.XxlSsoHelper; +import com.xxl.sso.core.model.LoginInfo; +import com.xxl.tool.core.StringTool; +import com.xxl.tool.response.Response; +import jakarta.servlet.http.HttpServletRequest; + +import java.util.ArrayList; +import java.util.List; + +/** + * jobGroup permission util + * + * @author xuxueli 2025-08-24 + */ +public class JobGroupPermissionUtil { + + /** + * check if has jobgroup permission + */ + public static boolean hasJobGroupPermission(LoginInfo loginInfo, int jobGroup){ + if (XxlSsoHelper.hasRole(loginInfo, Consts.ADMIN_ROLE).isSuccess()) { + return true; + } else { + List jobGroups = (loginInfo.getExtraInfo()!=null && loginInfo.getExtraInfo().containsKey("jobGroups")) + ? List.of(StringTool.tokenizeToArray(loginInfo.getExtraInfo().get("jobGroups"), ",")) :new ArrayList<>(); + return jobGroups.contains(String.valueOf(jobGroup)); + } + } + + /** + * valid jobGroup permission + */ + public static LoginInfo validJobGroupPermission(HttpServletRequest request, int jobGroup) { + Response loginInfoResponse = XxlSsoHelper.loginCheckWithAttr(request); + if (!(loginInfoResponse.isSuccess() && hasJobGroupPermission(loginInfoResponse.getData(), jobGroup))) { + throw new RuntimeException(I18nUtil.getString("system_permission_limit") + "[username="+ loginInfoResponse.getData().getUserName() +"]"); + } + return loginInfoResponse.getData(); + } + + /** + * filter jobGroupList by permission + */ + public static List filterJobGroupByPermission(HttpServletRequest request, List jobGroupListTotal){ + Response loginInfoResponse = XxlSsoHelper.loginCheckWithAttr(request); + + if (XxlSsoHelper.hasRole(loginInfoResponse.getData(), Consts.ADMIN_ROLE).isSuccess()) { + return jobGroupListTotal; + } else { + List jobGroups = (loginInfoResponse.getData().getExtraInfo()!=null && loginInfoResponse.getData().getExtraInfo().containsKey("jobGroups")) + ? List.of(StringTool.tokenizeToArray(loginInfoResponse.getData().getExtraInfo().get("jobGroups"), ",")) :new ArrayList<>(); + + return jobGroupListTotal + .stream() + .filter(jobGroup -> jobGroups.contains(String.valueOf(jobGroup.getId()))) + .toList(); + } + } + +} diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/util/old/CookieUtil.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/util/old/CookieUtil.java new file mode 100644 index 00000000..f545204d --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/util/old/CookieUtil.java @@ -0,0 +1,98 @@ +//package com.xxl.job.admin.util; +// +//import jakarta.servlet.http.Cookie; +//import jakarta.servlet.http.HttpServletRequest; +//import jakarta.servlet.http.HttpServletResponse; +// +///** +// * Cookie.Util +// * +// * @author xuxueli 2015-12-12 18:01:06 +// */ +//public class CookieUtil { +// +// // 默认缓存时间,单位/秒, 2H +// private static final int COOKIE_MAX_AGE = Integer.MAX_VALUE; +// // 保存路径,根路径 +// private static final String COOKIE_PATH = "/"; +// +// /** +// * 保存 +// * +// * @param response +// * @param key +// * @param value +// * @param ifRemember +// */ +// public static void set(HttpServletResponse response, String key, String value, boolean ifRemember) { +// int age = ifRemember?COOKIE_MAX_AGE:-1; +// set(response, key, value, null, COOKIE_PATH, age, true); +// } +// +// /** +// * 保存 +// * +// * @param response +// * @param key +// * @param value +// * @param maxAge +// */ +// private static void set(HttpServletResponse response, String key, String value, String domain, String path, int maxAge, boolean isHttpOnly) { +// Cookie cookie = new Cookie(key, value); +// if (domain != null) { +// cookie.setDomain(domain); +// } +// cookie.setPath(path); +// cookie.setMaxAge(maxAge); +// cookie.setHttpOnly(isHttpOnly); +// response.addCookie(cookie); +// } +// +// /** +// * 查询value +// * +// * @param request +// * @param key +// * @return +// */ +// public static String getValue(HttpServletRequest request, String key) { +// Cookie cookie = get(request, key); +// if (cookie != null) { +// return cookie.getValue(); +// } +// return null; +// } +// +// /** +// * 查询Cookie +// * +// * @param request +// * @param key +// */ +// private static Cookie get(HttpServletRequest request, String key) { +// Cookie[] arr_cookie = request.getCookies(); +// if (arr_cookie != null && arr_cookie.length > 0) { +// for (Cookie cookie : arr_cookie) { +// if (cookie.getName().equals(key)) { +// return cookie; +// } +// } +// } +// return null; +// } +// +// /** +// * 删除Cookie +// * +// * @param request +// * @param response +// * @param key +// */ +// public static void remove(HttpServletRequest request, HttpServletResponse response, String key) { +// Cookie cookie = get(request, key); +// if (cookie != null) { +// set(response, key, "", null, COOKIE_PATH, 0, true); +// } +// } +// +//} \ No newline at end of file diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java b/xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java index 8e0caa88..101efedc 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java @@ -38,7 +38,7 @@ public class ExecutorBizImpl implements ExecutorBiz { } if (isRunningOrHasQueue) { - return new ReturnT(ReturnT.FAIL_CODE, "job thread is running or has trigger queue."); + return ReturnT.ofFail("job thread is running or has trigger queue."); } return ReturnT.ofSuccess(); } @@ -70,7 +70,7 @@ public class ExecutorBizImpl implements ExecutorBiz { if (jobHandler == null) { jobHandler = newJobHandler; if (jobHandler == null) { - return new ReturnT(ReturnT.FAIL_CODE, "job handler [" + triggerParam.getExecutorHandler() + "] not found."); + return ReturnT.ofFail( "job handler [" + triggerParam.getExecutorHandler() + "] not found."); } } @@ -94,7 +94,7 @@ public class ExecutorBizImpl implements ExecutorBiz { jobHandler = new GlueJobHandler(originJobHandler, triggerParam.getGlueUpdatetime()); } catch (Exception e) { logger.error(e.getMessage(), e); - return new ReturnT(ReturnT.FAIL_CODE, e.getMessage()); + return ReturnT.ofFail( e.getMessage()); } } } else if (glueTypeEnum!=null && glueTypeEnum.isScript()) { @@ -115,7 +115,7 @@ public class ExecutorBizImpl implements ExecutorBiz { jobHandler = new ScriptJobHandler(triggerParam.getJobId(), triggerParam.getGlueUpdatetime(), triggerParam.getGlueSource(), GlueTypeEnum.match(triggerParam.getGlueType())); } } else { - return new ReturnT(ReturnT.FAIL_CODE, "glueType[" + triggerParam.getGlueType() + "] is not valid."); + return ReturnT.ofFail("glueType[" + triggerParam.getGlueType() + "] is not valid."); } // executor block strategy @@ -124,7 +124,7 @@ public class ExecutorBizImpl implements ExecutorBiz { if (ExecutorBlockStrategyEnum.DISCARD_LATER == blockStrategy) { // discard when running if (jobThread.isRunningOrHasQueue()) { - return new ReturnT(ReturnT.FAIL_CODE, "block strategy effect:"+ExecutorBlockStrategyEnum.DISCARD_LATER.getTitle()); + return ReturnT.ofFail("block strategy effect:"+ExecutorBlockStrategyEnum.DISCARD_LATER.getTitle()); } } else if (ExecutorBlockStrategyEnum.COVER_EARLY == blockStrategy) { // kill running jobThread diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/server/EmbedServer.java b/xxl-job-core/src/main/java/com/xxl/job/core/server/EmbedServer.java index 436f3afa..8d4fcd2e 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/server/EmbedServer.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/server/EmbedServer.java @@ -169,15 +169,15 @@ public class EmbedServer { private Object process(HttpMethod httpMethod, String uri, String requestData, String accessTokenReq) { // valid if (HttpMethod.POST != httpMethod) { - return new ReturnT(ReturnT.FAIL_CODE, "invalid request, HttpMethod not support."); + return ReturnT.ofFail("invalid request, HttpMethod not support."); } if (uri == null || uri.trim().length() == 0) { - return new ReturnT(ReturnT.FAIL_CODE, "invalid request, uri-mapping empty."); + return ReturnT.ofFail( "invalid request, uri-mapping empty."); } if (accessToken != null && accessToken.trim().length() > 0 && !accessToken.equals(accessTokenReq)) { - return new ReturnT(ReturnT.FAIL_CODE, "The access token is wrong."); + return ReturnT.ofFail("The access token is wrong."); } // services mapping @@ -198,11 +198,11 @@ public class EmbedServer { LogParam logParam = GsonTool.fromJson(requestData, LogParam.class); return executorBiz.log(logParam); default: - return new ReturnT(ReturnT.FAIL_CODE, "invalid request, uri-mapping(" + uri + ") not found."); + return ReturnT.ofFail( "invalid request, uri-mapping(" + uri + ") not found."); } } catch (Throwable e) { logger.error(e.getMessage(), e); - return new ReturnT(ReturnT.FAIL_CODE, "request error:" + ThrowableUtil.toString(e)); + return ReturnT.ofFail("request error:" + ThrowableUtil.toString(e)); } } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java b/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java index 8d211cea..909d46ef 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java @@ -63,7 +63,7 @@ public class JobThread extends Thread{ // avoid repeat if (!triggerLogIdSet.add(triggerParam.getLogId())) { logger.info(">>>>>>>>>>> repeate trigger job, logId:{}", triggerParam.getLogId()); - return new ReturnT(ReturnT.FAIL_CODE, "repeate trigger job, logId:" + triggerParam.getLogId()); + return ReturnT.ofFail("repeate trigger job, logId:" + triggerParam.getLogId()); } // push trigger queue diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/util/XxlJobRemotingUtil.java b/xxl-job-core/src/main/java/com/xxl/job/core/util/XxlJobRemotingUtil.java index ef1d41e8..a8a1f6cb 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/util/XxlJobRemotingUtil.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/util/XxlJobRemotingUtil.java @@ -119,7 +119,7 @@ public class XxlJobRemotingUtil { // valid StatusCode int statusCode = connection.getResponseCode(); if (statusCode != 200) { - return new ReturnT(ReturnT.FAIL_CODE, "xxl-job remoting fail, StatusCode("+ statusCode +") invalid. for url : " + url); + return ReturnT.ofFail("xxl-job remoting fail, StatusCode("+ statusCode +") invalid. for url : " + url); } // result @@ -137,12 +137,12 @@ public class XxlJobRemotingUtil { return returnT; } catch (Exception e) { logger.error("xxl-job remoting (url="+url+") response content invalid("+ resultJson +").", e); - return new ReturnT(ReturnT.FAIL_CODE, "xxl-job remoting (url="+url+") response content invalid("+ resultJson +")."); + return ReturnT.ofFail("xxl-job remoting (url="+url+") response content invalid("+ resultJson +")."); } } catch (Exception e) { logger.error(e.getMessage(), e); - return new ReturnT(ReturnT.FAIL_CODE, "xxl-job remoting error("+ e.getMessage() +"), for url : " + url); + return ReturnT.ofFail("xxl-job remoting error("+ e.getMessage() +"), for url : " + url); } finally { try { if (dataOutputStream != null) {