Подтвердить что ты не робот

Как полностью отключить 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 например или что-то вроде этого.

4b9b3361

Ответ 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