refactor(scheduler):重构任务API控制器包路径和请求映射

- 将JobApiController从controller.openapi包移动到scheduler.openapi包
- 更新包声明和导入语句以反映新的包结构- 移除显式的@RequestMapping("/api")注解,将其合并到方法级别
- 简化导入语句,使用通配符导入替代多个单独导入- 修改api方法参数,增加对访问令牌的请求头验证
- 在api方法中添加requestBody空值检查
3.3.0-release
xuxueli 1 month ago
parent 75e3caf672
commit cd71a1896f

@ -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<String> 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<HandleCallbackRequest> 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.");
}
}
}

@ -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<String> 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<HandleCallbackRequest> 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());
}
}
}
Loading…
Cancel
Save