springdoc-openapi-ui 添加 JWT header 参数到生成的 swagger
springdoc-openapi-ui add JWT header parameter to generated swagger
在我的 spring 启动应用程序中,我的端点由 spring 启动应用程序中的 header 参数验证。
当前的 swagger json 看起来像这样:
// part of current swagger.json
...
"paths": {
"/path1/{param1}": {
"get": {
"parameters": [
{
"name": "param1",
"in": "path",
"type": "string",
"required": true
}
]
}
}
}
...
我想使用 springdoc-openapi-ui
配置添加缺少的参数,因此它看起来像这样:
// I want to achieve swagger.json which contains additional parameter
...
"paths": {
"/path1/{param1}": {
"get": {
"parameters": [
{
"name": "param1",
"in": "path",
"type": "string",
"required": true
},
{
"name": "missingParam",
"in": "header",
"type": "string",
"required": true
}
]
}
}
}
...
我尝试通过将 Common Parameters for Various Paths
添加到我的 appplication.yml
解决方案来实现这一点
#application.yml
...
components:
parameters:
hiddenParam:
in: header
name: missingParam
required: true
schema:
type: string
paths:
/path1:
get:
parameters:
- $ref: '#/components/parameters/hiddenParam'
但是没用。
我的问题:
- 有没有办法使用应用程序配置修改我的 swagger 结果?
- 我想定义参数模板并将其添加到所有端点,我该如何实现?
您可以使用 OperationCustomizer
添加全局参数,例如 header,如下所示。这会将您的 parameter
添加到每个服务
@Configuration
public class SwaggerConfiguration {
@Bean
public OperationCustomizer customGlobalHeaders() {
return (Operation operation, HandlerMethod handlerMethod) -> {
Parameter missingParam1 = new Parameter()
.in(ParameterIn.HEADER.toString())
.schema(new StringSchema())
.name("missingParam1")
.description("header description2")
.required(true);
Parameter missingParam2 = new Parameter()
.in(ParameterIn.HEADER.toString())
.schema(new StringSchema())
.name("missingParam2")
.description("header description2")
.required(true);
operation.addParametersItem(missingParam1);
operation.addParametersItem(missingParam2);
return operation;
};
}
}
最后我决定使用不同的方法。
我定义了 security scheme and applied it globally as authorization header.
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.info(new Info().title("My App").version("1.0.0"))
// Components section defines Security Scheme "mySecretHeader"
.components(new Components()
.addSecuritySchemes("mySecretHeader", new SecurityScheme()
.type(SecurityScheme.Type.APIKEY)
.in(SecurityScheme.In.HEADER)
.name("missingParam")))
// AddSecurityItem section applies created scheme globally
.addSecurityItem(new SecurityRequirement().addList("mySecretHeader"));
}
现在 swagger-ui.html
允许根据测试人员的要求在授权 header 或不授权的情况下测试端点。
干杯!
在我的 spring 启动应用程序中,我的端点由 spring 启动应用程序中的 header 参数验证。 当前的 swagger json 看起来像这样:
// part of current swagger.json
...
"paths": {
"/path1/{param1}": {
"get": {
"parameters": [
{
"name": "param1",
"in": "path",
"type": "string",
"required": true
}
]
}
}
}
...
我想使用 springdoc-openapi-ui
配置添加缺少的参数,因此它看起来像这样:
// I want to achieve swagger.json which contains additional parameter
...
"paths": {
"/path1/{param1}": {
"get": {
"parameters": [
{
"name": "param1",
"in": "path",
"type": "string",
"required": true
},
{
"name": "missingParam",
"in": "header",
"type": "string",
"required": true
}
]
}
}
}
...
我尝试通过将 Common Parameters for Various Paths
添加到我的appplication.yml
解决方案来实现这一点
#application.yml
...
components:
parameters:
hiddenParam:
in: header
name: missingParam
required: true
schema:
type: string
paths:
/path1:
get:
parameters:
- $ref: '#/components/parameters/hiddenParam'
但是没用。
我的问题:
- 有没有办法使用应用程序配置修改我的 swagger 结果?
- 我想定义参数模板并将其添加到所有端点,我该如何实现?
您可以使用 OperationCustomizer
添加全局参数,例如 header,如下所示。这会将您的 parameter
添加到每个服务
@Configuration
public class SwaggerConfiguration {
@Bean
public OperationCustomizer customGlobalHeaders() {
return (Operation operation, HandlerMethod handlerMethod) -> {
Parameter missingParam1 = new Parameter()
.in(ParameterIn.HEADER.toString())
.schema(new StringSchema())
.name("missingParam1")
.description("header description2")
.required(true);
Parameter missingParam2 = new Parameter()
.in(ParameterIn.HEADER.toString())
.schema(new StringSchema())
.name("missingParam2")
.description("header description2")
.required(true);
operation.addParametersItem(missingParam1);
operation.addParametersItem(missingParam2);
return operation;
};
}
}
最后我决定使用不同的方法。 我定义了 security scheme and applied it globally as authorization header.
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.info(new Info().title("My App").version("1.0.0"))
// Components section defines Security Scheme "mySecretHeader"
.components(new Components()
.addSecuritySchemes("mySecretHeader", new SecurityScheme()
.type(SecurityScheme.Type.APIKEY)
.in(SecurityScheme.In.HEADER)
.name("missingParam")))
// AddSecurityItem section applies created scheme globally
.addSecurityItem(new SecurityRequirement().addList("mySecretHeader"));
}
现在 swagger-ui.html
允许根据测试人员的要求在授权 header 或不授权的情况下测试端点。
干杯!