Как полностью отключить swagger-ui в spring-boot?(/ Swagger-ui.html должен вернуть 404)
Я прочитал следующую тему: Отключение Swagger с Spring MVC
и я написал:
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.project.name.controller"))
.paths(PathSelectors.ant("/api/**"))
.build()
.apiInfo(apiInfo())
.enable(false);
}
Но в случае, если я пытаюсь получить доступ к Swagger UI: localhost:8080/swagger-ui.html
я вижу
Это выглядит не точно. Могу ли я полностью отключить этот URL? 404 например или как то так.
10 ответов
Мой ответ похож на ответ, представленный ранее, с небольшой разницей. Я обычно создаю отдельный весенний профиль с именем swagger
, Когда я хочу включить Swagger, я запускаю следующий флаг VM при запуске моего приложения, -Dspring.profiles.active=swagger
, Вот пример моей конфигурации Swagger,
@Profile(value = {"swagger"})
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
...
}
В следующий раз, когда вы попытаетесь получить доступ swagger-ui.html
без swagger
профиль, вы получите пустой экран Swagger, но не 404.
Если вы вообще не хотите загружать статическую страницу пользовательского интерфейса Swagger, вы можете написать простой контроллер, как показано ниже,
@Profile("!swagger")
@RestController
@Slf4j
public class DisableSwaggerUiController {
@RequestMapping(value = "swagger-ui.html", method = RequestMethod.GET)
public void getSwagger(HttpServletResponse httpResponse) throws IOException {
httpResponse.setStatus(HttpStatus.NOT_FOUND.value());
}
}
Теперь, если вы попытаетесь получить доступ swagger-ui.html
без swagger
профиль, вы получите 404.
с версией swagger 3.0.0 вы можете добавить springfox.documentation.enabled=false в соответствующий файл профиля среды application.properties. Например, я добавил это в application-prod.properties disable in production (при запуске приложения вы должны указать профиль, используя аргументы виртуальной машины, такие как -Dspring.profiles.active=prod)
Добавление к ответу @Hayden (у меня недостаточно баллов для комментариев ..)
Согласно документации springdoc, вы можете отключить конечные точки API Springdoc и swagger-ui, используя следующие свойства:
https://springdoc.org/#disabling-the-springdoc-openapi-endpoints
# Disabling the /v3/api-docs enpoint
springdoc.api-docs.enabled=false
https://springdoc.org/#disable-the-swagger-ui
# Disabling the swagger-ui
springdoc.swagger-ui.enabled=false
Вы можете вывести @EnableSwagger2
к своему собственному @Configruation
и загрузить его условно через свойство или профиль. например
@Profile("!production")
@Configuration
@EnableSwagger2
public class SwaggerConfiguration{
//Additional Swagger Beans
}
Это активирует Swagger для любого профиля, который не является производственным.
Если у вас нет аннотаций Swagger внутри контроллеров... просто исключите зависимости SwaggerConfig.class и swagger при сборке
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<excludes>
<exclude>com/company/app/SwaggerConfig.java</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</exclude>
<exclude>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</exclude>
</excludes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Для пользователей SpringDoc добавьте это в свой
application.properties
springdoc.api-docs.enabled=false
Чтобы отключить Swagger, только когда
prod
профиль активен, добавьте его в свой
application-prod.properties
вместо
В последней версии весенней загрузки вы можете добавить это в свой application.yml:
springdoc:
swagger-ui:
enabled: false
api-docs:
enabled: false
Таким образом, этот ключ swagger-ui используется для отключения интерфейса swagger, а ключ api-docs используется для отключения маршрута, на котором обслуживается JSON, описывающий ваш API.
В моей конфигурации у меня есть профиль prod , который читает application-prod.yml, содержащий эти строки.
При использовании зависимости springdoc-openapi-ui можно отключить swagger-ui через свойство:
springdoc.swagger-ui.enabled=false
как указано в Spring Doc FAQ.
Для тех, кто использует генерацию кода:
@Controller
@Profile({"dev", "staging"})
public class HomeController {
@RequestMapping(value = "/")
public String index() {
System.out.println("swagger-ui.html");
return "redirect:swagger-ui.html";
}
}
И добавьте вам файл.swagger-codegen-ignore, иначе ваши изменения будут перезаписаны при следующей сборке maven
Просто удалите зависимость.
<!--<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>-->
Это не влияет на компиляцию.