You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 10:18:43