Как добавить заголовок для генерации чванства на основе аннотации? - PullRequest
0 голосов
/ 25 января 2019

Рассмотрим пример:

@RequestMapping("myPath")
public Mono<MyDto> myMethod(@RequestParam(value = "amount") Long amount, @AuthenticationPrincipal MyUser user) {

} 

Чтобы пропустить MyUser из списка параметров, я добавил @AuthenticationPrincipal к исключениям и сгенерированным Springfox документам swagger:

"/myPath": {
  "get": {
    "tags": [
      "my-controller"
    ],
    "summary": "myMethod",
    "operationId": "myMethodUsingGET",
    "produces": [
      "*/*"
    ],
    "parameters": [
      {
        "name": "amount",
        "in": "query",
        "description": "amount",
        "required": true,
        "type": "integer",
        "format": "int64"
      }
    ],
    "responses": {
      "200": {
        "description": "OK",
        "schema": {
          "$ref": "#/definitions/Mono«MyDto»"
        }
      },
      "401": {
        "description": "Unauthorized"
      },
      "403": {
        "description": "Forbidden"
      },
      "404": {
        "description": "Not Found"
      }
    },
    "deprecated": false
  }
}

Вотконфигурация spring:

@Configuration
@EnableSwagger2WebFlux
public class SwaggerConfig {
    @Bean
    public Docket api() {
        Class[] clazz = {AuthenticationPrincipal.class};

        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .paths(PathSelectors.any())
                .build()
                .ignoredParameterTypes(clazz);
    }
}

Есть ли способ добавить заголовок в документацию swagger, сгенерированную проектом springfox для каждого пути, где указано @AuthenticationPrincipal?Например, игнорируйте класс MyUser как параметр (или группу параметров) и замените его заголовком (например, My-Auth-Header) для всех методов @RequestMapping, где найден @AuthenticationPrincipal.

1 Ответ

0 голосов
/ 25 января 2019

Это пример того, как иметь параметр header с именем Auithorization, который я использую для добавления токена JWT

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {

        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(
                        Collections.singletonList(new ParameterBuilder()
                                .name("Authorization")
                                .description("JWT Authorization token")
                                .modelRef(new ModelRef("string"))
                                .parameterType("header")
                                .required(false)
                                .build()));
    }
}
...