From cd71a1896f8fc39a4d5f088733b9b6f2ba1f07b8 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Sat, 1 Nov 2025 01:11:10 +0800 Subject: [PATCH] =?UTF-8?q?refactor(scheduler):=E9=87=8D=E6=9E=84=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1API=E6=8E=A7=E5=88=B6=E5=99=A8=E5=8C=85=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E5=92=8C=E8=AF=B7=E6=B1=82=E6=98=A0=E5=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将JobApiController从controller.openapi包移动到scheduler.openapi包 - 更新包声明和导入语句以反映新的包结构- 移除显式的@RequestMapping("/api")注解,将其合并到方法级别 - 简化导入语句,使用通配符导入替代多个单独导入- 修改api方法参数,增加对访问令牌的请求头验证 - 在api方法中添加requestBody空值检查 --- .../controller/openapi/JobApiController.java | 72 ----------------- .../scheduler/openapi/JobApiController.java | 80 +++++++++++++++++++ 2 files changed, 80 insertions(+), 72 deletions(-) delete mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/controller/openapi/JobApiController.java create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/openapi/JobApiController.java diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/openapi/JobApiController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/openapi/JobApiController.java deleted file mode 100644 index f17e9c78..00000000 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/openapi/JobApiController.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.xxl.job.admin.controller.openapi; - -import com.xxl.job.admin.scheduler.config.XxlJobAdminBootstrap; -import com.xxl.job.core.biz.AdminBiz; -import com.xxl.job.core.biz.model.HandleCallbackRequest; -import com.xxl.job.core.biz.model.RegistryRequest; -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; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.util.List; - -/** - * Created by xuxueli on 17/5/10. - */ -@Controller -@RequestMapping("/api") -public class JobApiController { - - @Resource - private AdminBiz adminBiz; - - /** - * api - * - * @param uri - * @param data - * @return - */ - @RequestMapping("/{uri}") - @ResponseBody - @XxlSso(login = false) - public ReturnT api(HttpServletRequest request, @PathVariable("uri") String uri, @RequestBody(required = false) String data) { - - // valid - if (!"POST".equalsIgnoreCase(request.getMethod())) { - return ReturnT.ofFail("invalid request, HttpMethod not support."); - } - if (StringTool.isBlank(uri)) { - return ReturnT.ofFail("invalid request, uri-mapping empty."); - } - if (StringTool.isNotBlank(XxlJobAdminBootstrap.getInstance().getAccessToken()) - && !XxlJobAdminBootstrap.getInstance().getAccessToken().equals(request.getHeader(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN))) { - return ReturnT.ofFail("The access token is wrong."); - } - - // services mapping - if ("callback".equals(uri)) { - List callbackParamList = GsonTool.fromJson(data, List.class, HandleCallbackRequest.class); - return adminBiz.callback(callbackParamList); - } else if ("registry".equals(uri)) { - RegistryRequest registryParam = GsonTool.fromJson(data, RegistryRequest.class); - return adminBiz.registry(registryParam); - } else if ("registryRemove".equals(uri)) { - RegistryRequest registryParam = GsonTool.fromJson(data, RegistryRequest.class); - return adminBiz.registryRemove(registryParam); - } else { - return ReturnT.ofFail("invalid request, uri-mapping("+ uri +") not found."); - } - - } - -} diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/openapi/JobApiController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/openapi/JobApiController.java new file mode 100644 index 00000000..f7c499b9 --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/openapi/JobApiController.java @@ -0,0 +1,80 @@ +package com.xxl.job.admin.scheduler.openapi; + +import com.xxl.job.admin.scheduler.config.XxlJobAdminBootstrap; +import com.xxl.job.core.biz.AdminBiz; +import com.xxl.job.core.biz.model.HandleCallbackRequest; +import com.xxl.job.core.biz.model.RegistryRequest; +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; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * Created by xuxueli on 17/5/10. + */ +@Controller +public class JobApiController { + + @Resource + private AdminBiz adminBiz; + + /** + * api + */ + @RequestMapping("/api/{uri}") + @ResponseBody + @XxlSso(login = false) + public ReturnT api(HttpServletRequest request, + @PathVariable("uri") String uri, + @RequestHeader(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN) String accesstoken, + @RequestBody(required = false) String requestBody) { + + // valid + if (!"POST".equalsIgnoreCase(request.getMethod())) { + return ReturnT.ofFail("invalid request, HttpMethod not support."); + } + if (StringTool.isBlank(uri)) { + return ReturnT.ofFail("invalid request, uri-mapping empty."); + } + if (StringTool.isBlank(requestBody)) { + return ReturnT.ofFail("invalid request, requestBody empty."); + } + + // valid token + if (StringTool.isNotBlank(XxlJobAdminBootstrap.getInstance().getAccessToken()) + && !XxlJobAdminBootstrap.getInstance().getAccessToken().equals(accesstoken)) { + return ReturnT.ofFail("The access token is wrong."); + } + + // dispatch request + try { + switch (uri) { + case "callback": { + List callbackParamList = GsonTool.fromJson(requestBody, List.class, HandleCallbackRequest.class); + return adminBiz.callback(callbackParamList); + } + case "registry": { + RegistryRequest registryParam = GsonTool.fromJson(requestBody, RegistryRequest.class); + return adminBiz.registry(registryParam); + } + case "registryRemove": { + RegistryRequest registryParam = GsonTool.fromJson(requestBody, RegistryRequest.class); + return adminBiz.registryRemove(registryParam); + } + default: + return ReturnT.ofFail("invalid request, uri-mapping("+ uri +") not found."); + } + } catch (Exception e) { + return ReturnT.ofFail("openapi invoke error: " + e.getMessage()); + } + + } + +}