Я пытаюсь интегрировать Swagger 2 в мой API, который реализован с использованием новейшей версии CXF: 3.2.7.
Я перепробовал множество учебников, официальную документацию CXF , другие тоже (например, Spring Boot, Apache CXF, Swagger под JAX-RS ).
Официальный сайт чванства мне не помогает. Swagger OpenAPI 2.0 doc не работает, сосед OpenAPI 3.0 .
Он не работает со схемами компонентов Open API 3.0.0, поэтому я остановился на apiKeyDefinition.
Тот, который сейчас работает, можно найти в этой теме в ответе @Naoj:
CXF Swagger2Feature добавление безопасности Определения
С этим решением появился пользовательский интерфейс swagger, а также кнопка Autorize.
Я заполняю форму аутентификации и после этого пытаюсь отправлять запросы с помощью swagger-ui. Проблема в том, что заголовок Authorization не появляется в запросе, поэтому я получил 401 ответ.
В помпе:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-service-description-swagger</artifactId>
<version>3.2.7</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>swagger-ui</artifactId>
<version>3.20.1</version>
</dependency>
Моя конфигурация выглядит так:
@Configuration
public class SwaggerConfig {
@Bean
@ConfigurationProperties("swagger")
public Swagger2Feature swagger() {
return new ExtendedSwagger2Feature();
}
@Bean
@DependsOn("jaxRsServer")
public ServletContextInitializer initializer() {
return servletContext -> {
BeanConfig scanner = (BeanConfig) ScannerFactory.getScanner();
Swagger swagger = scanner.getSwagger();
servletContext.setAttribute("swagger", swagger);
};
}
}
Расширенные функции чванства следующие:
@Provider(value = Provider.Type.Feature, scope = Provider.Scope.Server)
public class ExtendedSwagger2Feature extends Swagger2Feature {
@Override
protected void addSwaggerResource(Server server, Bus bus) {
super.addSwaggerResource(server, bus);
BeanConfig config = (BeanConfig) ScannerFactory.getScanner();
Swagger swagger = config.getSwagger();
swagger.securityDefinition("Bearer", new ApiKeyAuthDefinition("authorization", In.HEADER));
}
}
Я пытаюсь настроить аутентификацию на основе токенов Bearer JWT. Мой application.yml содержит следующее:
swagger:
basePath: /rest
title: Backend Application
description: Swagger documentation of Backend Application REST services
license:
licenceUrl:
contact:
resourcePackage: my.resource.package
scan: true
apiKeyAuthDefinition:
name: Authorization
in: header
type: http
Я импортирую SwaggerConfig в мой класс @SpringBootApplication так:
@Import(SwaggerConfig.class)
Работает, как я вижу, появился чванец, и поле заголовка и описания заполнено свойствами моего yml.
Что мне не хватает? Любые предложения будут оценены.
Заранее спасибо.