it-swarm.com.de

So deaktivieren Sie swagger-ui im ​​Springboot vollständig (/ swagger-ui.html sollte 404 zurückgeben)

Ich habe folgendes Thema gelesen: Deaktivieren von Swagger mit Spring MVC

und ich schrieb:

@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);
}

Aber falls ich versuche, auf Swagger ui zuzugreifen: localhost:8080/swagger-ui.html
Aha  enter image description here

Es sieht nicht genau aus. Kann ich diese URL vollständig deaktivieren? 404 zum Beispiel oder so ähnlich.

12
gstackoverflow

Meine Antwort ist ähnlich wie die zuvor gegebene mit einem kleinen Unterschied. Normalerweise erstelle ich ein separates Federprofil mit dem Namen swagger. Wenn ich Swagger aktivieren möchte, übergebe ich beim Start meiner Anwendung den folgenden VM - Flag -Dspring.profiles.active=swagger. Hier ist ein Beispiel meiner Swagger-Konfiguration.

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

Wenn Sie das nächste Mal versuchen, auf swagger-ui.html ohne swagger zuzugreifen, wird ein leerer Swagger-Bildschirm angezeigt, nicht jedoch 404.

 enter image description here

Wenn Sie die statische Swagger-UI-Seite überhaupt nicht laden möchten, können Sie einen einfachen Controller wie folgt schreiben:

@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());
    }
}

Wenn Sie jetzt versuchen, auf swagger-ui.html ohne swagger zuzugreifen, erhalten Sie eine 404.

22
Indra Basak

Sie können den @EnableSwagger2 zu seinem eigenen @Configruation auslagern und bedingt über eine Eigenschaft oder ein Profil laden. z.B.

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

}

dies würde Swagger für jedes Profil aktivieren, das nicht produktiv ist. 

3
Darren Forsythe

Für diejenigen, die den Code gen verwenden:

@Controller 
 @ Profile ({"dev", "staging"}) 
 Public class HomeController {
 @RequestMapping (value = "/")
 Public String index () {
 System.out.println ("swagger-ui.html"); 
 return "redirect: swagger-ui.html"; 
} 
}

Und fügen Sie die Datei zu .swagger-codegen-ignore hinzu, sonst werden Ihre Änderungen beim nächsten Maven-Build überschrieben

0
Jacques Koorts

Wenn Sie keine Swagger-Annotationen in Controllern haben, schließen Sie einfach SwaggerConfig.class und Swagger-Abhängigkeiten vom Build aus

<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>
0
Ramon Franquesa