Как полностью отключить 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);
}
Но в случае, если я пытаюсь получить доступ к пользовательскому интерфейсу localhost:8080/swagger-ui.html
: localhost:8080/swagger-ui.html
Я вижу ![enter image description here]()
Это выглядит не точно. Могу ли я полностью отключить этот URL? 404 например или что-то вроде этого.
Ответы
Ответ 1
Мой ответ аналогичен ранее предоставленному ответу с небольшой разницей. Обычно я создаю отдельный профиль spring с именем 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.
Ответ 2
Вы можете экпортировать @EnableSwagger2
в свой собственный @Configruation
и загружать его условно через свойство или профиль. например.
@Profile("!production")
@Configuration
@EnableSwagger2
public class SwaggerConfiguration{
//Additional Swagger Beans
}
это активировало бы swagger для любого профиля, который не является производством.
Ответ 3
Если внутри контроллеров нет аннотаций 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>
Ответ 4
Для тех, кто использует код gen:
@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