web-dev-qa-db-ja.com

spring-bootでswagger-uiを完全に無効にする方法は?(/ swagger-ui.htmlは404を返す必要があります)

次のトピックを読みました: Spring MVCでSwaggerを無効にする

そして私は書いた:

@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
そうですか - enter image description here

正確に見えません。このURLを完全に無効にできますか?たとえば404またはこのようなもの。

15
gstackoverflow

私の答えは、以前に提供した答えと似ていますが、わずかな違いがあります。通常、swaggerという名前の別個のスプリングプロファイルを作成します。 Swaggerを有効にしたい場合は、アプリケーションの起動中に次のVMフラグ-Dspring.profiles.active=swagger。]を渡します。これが私のSwagger構成の例です。

@Profile(value = {"swagger"})
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
    ...
}

次回swaggerプロファイルなしでswagger-ui.htmlにアクセスしようとすると、404ではなく空のSwagger画面が表示されます。

enter image description here

静的なSwagger UIページをまったくロードしたくない場合は、以下に示すように簡単なコントローラーを作成できます。

@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プロファイルなしでswagger-ui.htmlにアクセスしようとすると、404が返されます。

32
Indra Basak

@EnableSwagger2を独自の@Configruationに外部化し、プロパティまたはプロファイルを介して条件付きでロードできます。例えば.

@Profile("!production")
@Configuration
@EnableSwagger2
public class SwaggerConfiguration{
    //Additional Swagger Beans

}

これにより、実稼働ではないプロファイルのswaggerがアクティブになります。

6
Darren Forsythe

コントローラ内に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>
1
Ramon Franquesa

コード生成を使用する場合:

@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ビルドで上書きされます

0
Jacques Koorts