为 Spring Boot 中的每个 API 添加自定义请求标头

问题描述 投票:0回答:4

我正在尝试向每个 API 添加自定义请求标头,我可以通过向每个 API 添加一段代码来做到这一点

`public ResponseDTO setNames(@RequestHeader(value="my-header",required = false HttpServletRequest httpServletRequest) throws Exception {}`

但是我希望这能够自动完成,就像我们创建新 API 时默认具有授权标头一样。这该怎么做,谁能告诉我一个好的解决方案

enter image description here

spring-boot authentication spring-security header request-headers
4个回答
4
投票

如果您正在使用

springdoc-openapi

,您可以使用以下内容
@Configuration
class CustomizeSpringDoc {
    @Bean
    fun publicApi(): GroupedOpenApi {
        return GroupedOpenApi.builder()
            .group("add-auth-header")
            .addOperationCustomizer { operation, handlerMethod ->
                operation.parameters.add(
                    HeaderParameter()
                        .name("Authorization")
                        .description("Access Token")
                )
                operation
            }
            .build()
    }
}

如果您正在使用

spring-fox
,您可以参考以下链接
globalRequestParameters
http://springfox.github.io/springfox/docs/current/#quick-start-guides


2
投票

要对每个请求进行标头验证,您可以使用

Filter
HandlerInterceptors

Filters
在请求到达
DispatcherServlet
之前拦截请求,使其成为粗粒度任务的理想选择,例如:

  • 认证
  • 记录和审核
  • 图像和数据压缩
  • 我们想要与 Spring MVC 解耦的任何功能
另一方面,

HandlerIntercepors
拦截
DispatcherServlet
和我们的
Controllers
之间的请求。这是在 Spring MVC 框架内完成的,提供对 Handler 和 ModelAndView 对象的访问。

这减少了重复并允许更细粒度的功能,例如:

  • 处理跨领域问题,例如应用程序日志记录
  • 详细的授权检查
  • 操作 Spring 上下文或模型

来源:https://www.baeldung.com/spring-mvc-handlerinterceptor-vs-filter


0
投票

您可以在 Spring-boot 项目中使用

OpenAPI specification (previously Swagger specification)
,其中,您可以定义 API 以及
Request/Response
标头以及您可能想要返回的任何错误模型或您想要捕获的任何其他自定义字段!

通过定义,您将有权提及诸如

required, minLength, maxLength
等属性

openAPI 插件将处理剩下的事情!

您可以参考这些链接来看看!

https://www.javainuse.com/spring/boot_swagger3

https://www.baeldung.com/spring-rest-openapi-documentation


0
投票

添加 Kotlin 答案的

java
版本

@Bean
GroupedOpenApi publicApi() {
    return GroupedOpenApi.builder()
        .group("add-user-id-header")
        .addOperationCustomizer((operation, $) -> {
            operation.addParametersItem(
                new HeaderParameter()
                    .name("Authorization")
                    .description("Access Token")
                    .required(true)
            );
            return operation;
        })
        .build();
}
© www.soinside.com 2019 - 2024. All rights reserved.