Spring+Groovy Maven项目连接已有Swagger API端点的认证配置问题
对接JWT认证的Swagger API(Spring+Groovy+Maven环境)
核心思路
你已经拿到固定JWT Token和请求头信息,无需走OAuth2动态Token流程,核心就是在请求目标Swagger API时,带上指定的认证头即可。下面分两种常用方案实现:
方案一:直接用Spring RestTemplate(快速简单)
1. 确认依赖
确保pom.xml已引入Spring Web依赖(一般Spring项目默认包含):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
2. 配置Token参数
在application.properties中添加配置项:
# 目标API基础地址 target.api.base-url=https://xxx.xxx.xxx/api # 对方提供的JWT Token target.api.auth-token=your-fixed-jwt-token-here # 对方要求的认证头名称(通常为Authorization) target.api.auth-header=Authorization
3. Groovy代码实现
创建API对接服务类,注入RestTemplate并添加认证头:
import org.springframework.beans.factory.annotation.Value import org.springframework.http.HttpHeaders import org.springframework.http.HttpEntity import org.springframework.http.HttpMethod import org.springframework.http.MediaType import org.springframework.stereotype.Service import org.springframework.web.client.RestTemplate @Service class TargetApiClient { @Value('${target.api.base-url}') private String baseUrl @Value('${target.api.auth-token}') private String authToken @Value('${target.api.auth-header}') private String authHeader private final RestTemplate restTemplate // 构造注入Spring自动配置的RestTemplate TargetApiClient(RestTemplate restTemplate) { this.restTemplate = restTemplate } // GET请求示例:获取数据 def fetchData(String endpointPath) { HttpHeaders headers = new HttpHeaders() // 若对方要求的头格式不是Bearer,直接替换为指定格式 headers.set(authHeader, "Bearer ${authToken}") HttpEntity<Void> requestEntity = new HttpEntity<>(headers) def response = restTemplate.exchange( "${baseUrl}${endpointPath}", HttpMethod.GET, requestEntity, Map // 根据返回结构替换为自定义DTO或其他类型 ) return response.body } // POST请求示例:提交数据 def postData(String endpointPath, Object requestBody) { HttpHeaders headers = new HttpHeaders() headers.set(authHeader, "Bearer ${authToken}") headers.setContentType(MediaType.APPLICATION_JSON) HttpEntity<Object> requestEntity = new HttpEntity<>(requestBody, headers) def response = restTemplate.exchange( "${baseUrl}${endpointPath}", HttpMethod.POST, requestEntity, Map ) return response.body } }
方案二:复用Swagger Codegen生成的客户端类(类型安全对齐API)
如果想基于对方Swagger文档生成类型安全的客户端,但不想新建项目,可按以下步骤操作:
1. 生成客户端代码
用Swagger Codegen命令行生成仅客户端类(不生成完整Maven项目):
swagger-codegen generate -i https://对方swagger文档地址/v2/api-docs -l java -o ./temp-client --api-package com.yourproject.api.client --model-package com.yourproject.api.model --invoker-package com.yourproject.api.invoker
2. 迁移代码到现有项目
将./temp-client/src/main/java下的ApiClient、各类Api接口、Model实体类复制到你项目的对应包路径下。
3. 配置ApiClient全局认证头
在Spring配置类中初始化ApiClient并设置全局认证:
import com.yourproject.api.invoker.ApiClient import org.springframework.beans.factory.annotation.Value import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration @Configuration class ApiClientConfig { @Value('${target.api.base-url}') private String baseUrl @Value('${target.api.auth-token}') private String authToken @Value('${target.api.auth-header}') private String authHeader @Bean ApiClient apiClient() { ApiClient apiClient = new ApiClient() apiClient.setBasePath(baseUrl) // 添加全局认证头,格式按对方要求调整 apiClient.addDefaultHeader(authHeader, "Bearer ${authToken}") return apiClient } }
4. 使用生成的Api接口
注入对应Api类即可调用接口:
import com.yourproject.api.client.UserApi import org.springframework.stereotype.Service @Service class TargetApiClient { private final UserApi userApi TargetApiClient(UserApi userApi) { this.userApi = userApi } // 调用生成的接口方法(方法名对应Swagger定义) def getUserInfo(Long userId) { return userApi.getUserByIdUsingGET(userId) } }
注意事项
- 若Token存在过期逻辑,后续需补充Token刷新机制,当前先按固定Token实现。
- 测试前可先用Postman验证Token和请求头的有效性,再移植到代码中。
- 若对方要求的认证头格式不是
Authorization: Bearer xxx,直接替换为指定格式即可。
内容的提问来源于stack exchange,提问作者maiah
相关产品推荐
相关产品推荐

