From a56bd053894e5d14686d55a4d9831fc9cc4cd8ed Mon Sep 17 00:00:00 2001 From: xlh12306 <2860437006@qq.com> Date: Wed, 14 May 2025 22:04:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E8=AF=B7=E6=B1=82=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=BA=E5=A4=A7=E5=86=99=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8Dopenapi=E5=9B=9E=E8=B0=83=E6=89=A7=E8=A1=8C=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E6=8E=A5=E5=8F=A3=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../openapi/controller/OpenApiController.java | 73 ++++++++++++++++--- .../src/views/openapi/OpenApi.data.ts | 32 ++++---- 2 files changed, 80 insertions(+), 25 deletions(-) diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/openapi/controller/OpenApiController.java b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/openapi/controller/OpenApiController.java index 2a64505d..66c46aa7 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/openapi/controller/OpenApiController.java +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/openapi/controller/OpenApiController.java @@ -1,5 +1,6 @@ package org.jeecg.modules.openapi.controller; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -11,6 +12,8 @@ import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.util.JwtUtil; +import org.jeecg.common.util.RedisUtil; +import org.jeecg.common.util.RestUtil; import org.jeecg.modules.openapi.entity.OpenApi; import org.jeecg.modules.openapi.entity.OpenApiAuth; import org.jeecg.modules.openapi.entity.OpenApiHeader; @@ -28,9 +31,12 @@ import org.springframework.http.HttpMethod; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; import javax.servlet.http.HttpServletRequest; +import java.net.URI; import java.util.*; +import java.util.stream.Collectors; /** * @date 2024/12/10 9:11 @@ -42,6 +48,8 @@ public class OpenApiController extends JeecgController @Autowired private RestTemplate restTemplate; @Autowired + private RedisUtil redisUtil; + @Autowired private ISysUserService sysUserService; @Autowired private OpenApiAuthService openApiAuthService; @@ -140,25 +148,72 @@ public class OpenApiController extends JeecgController result.put("data", null); return Result.error("失败", result); } - List headers = JSON.parseArray(openApi.getHeadersJson(),OpenApiHeader.class); + HttpHeaders httpHeaders = new HttpHeaders(); + if (StrUtil.isNotEmpty(openApi.getHeadersJson())) { + List headers = JSON.parseArray(openApi.getHeadersJson(),OpenApiHeader.class); + if (headers.size()>0) { + for (OpenApiHeader header : headers) { + httpHeaders.put(header.getHeaderKey(), Lists.newArrayList(request.getHeader(header.getHeaderKey()))); + } + } + } + String url = openApi.getOriginUrl(); String method = openApi.getRequestMethod(); - - HttpHeaders httpHeaders = new HttpHeaders(); - for (OpenApiHeader header : headers) { - httpHeaders.put(header.getHeaderKey(), Lists.newArrayList(request.getHeader(header.getHeaderKey()))); - } String appkey = request.getHeader("appkey"); OpenApiAuth openApiAuth = openApiAuthService.getByAppkey(appkey); SysUser systemUser = sysUserService.getById(openApiAuth.getSystemUserId()); - String token = JwtUtil.sign(systemUser.getUsername(), systemUser.getPassword()); + String token = this.getToken(systemUser.getUsername(), systemUser.getPassword()); httpHeaders.put("X-Access-Token", Lists.newArrayList(token)); - + httpHeaders.put("Content-Type",Lists.newArrayList("application/json")); HttpEntity httpEntity = new HttpEntity<>(json, httpHeaders); + url = RestUtil.getBaseUrl() + url; + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url); + if (HttpMethod.GET.matches(method) + || HttpMethod.DELETE.matches(method) + || HttpMethod.OPTIONS.matches(method) + || HttpMethod.TRACE.matches(method)) { + //拼接参数 + if (!request.getParameterMap().isEmpty()) { + if (StrUtil.isNotEmpty(openApi.getParamsJson())) { + List params = JSON.parseArray(openApi.getParamsJson(),OpenApiParam.class); + if (params.size()>0) { + Map openApiParamMap = params.stream().collect(Collectors.toMap(p -> p.getParamKey(), p -> p, (e, r) -> e)); + request.getParameterMap().forEach((k, v) -> { + OpenApiParam openApiParam = openApiParamMap.get(k); + if (Objects.nonNull(openApiParam)) { + if(v==null&&StrUtil.isNotEmpty(openApiParam.getDefaultValue())){ + builder.queryParam(openApiParam.getParamKey(), openApiParam.getDefaultValue()); + } + if (v!=null){ + builder.queryParam(openApiParam.getParamKey(), v); + } + } + }); + } + } - return restTemplate.exchange(url, HttpMethod.resolve(method), httpEntity, Result.class, request.getParameterMap()).getBody(); + } + } + URI targetUrl = builder.build().encode().toUri(); + return restTemplate.exchange(targetUrl.toString(), Objects.requireNonNull(HttpMethod.resolve(method)), httpEntity, Result.class, request.getParameterMap()).getBody(); } + /** + * 生成接口访问令牌 Token + * + * @param USERNAME + * @param PASSWORD + * @return + */ + private String getToken(String USERNAME, String PASSWORD) { + String token = JwtUtil.sign(USERNAME, PASSWORD); + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, 60); + return token; + } + + @GetMapping("/json") public SwaggerModel swaggerModel() { diff --git a/jeecgboot-vue3/src/views/openapi/OpenApi.data.ts b/jeecgboot-vue3/src/views/openapi/OpenApi.data.ts index f09a018a..32c4c5a5 100644 --- a/jeecgboot-vue3/src/views/openapi/OpenApi.data.ts +++ b/jeecgboot-vue3/src/views/openapi/OpenApi.data.ts @@ -74,34 +74,34 @@ export const formSchema: FormSchema[] = [ componentProps:{ dictOptions: [ { - text: 'post', - value: 'post', + text: 'POST', + value: 'POST', }, { - text: 'get', - value: 'get', + text: 'GET', + value: 'GET', }, { - text: 'head', - value: 'head', + text: 'HEAD', + value: 'HEAD', }, { - text: 'put', - value: 'put', + text: 'PUT', + value: 'PUT', }, { - text: 'patch', - value: 'patch', + text: 'PATCH', + value: 'PATCH', }, { - text: 'delete', - value: 'delete', + text: 'DELETE', + value: 'DELETE', },{ - text: 'options', - value: 'options', + text: 'OPTIONS', + value: 'OPTIONS', },{ - text: 'trace', - value: 'trace', + text: 'TRACE', + value: 'TRACE', }, ] },