4 votes

L'interface utilisateur de Swagger est vide et donne 403

J'utilise spring boot et j'ai ajouté swagger à mes dépendances :

<dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.8.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.8.0</version>
    </dependency>

Ma configuration :

@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
}

Quand je vais sur cette url :

http://localhost:8080/v2/api-docs cela fonctionne et je récupère le json.

L'interface utilisateur swagger http://localhost:8080/swagger-ui.html

C'est juste une page vide maintenant quand j'inspecte l'onglet réseau dans chrome je vois ça :

Failed to load resource: the server responded with a status of 403 ()
swagger-ui-standalone-preset.js Failed to load resource: the server responded with a status of 403 ()
swagger-ui.css Failed to load resource: the server responded with a status of 403 ()
springfox.js Failed to load resource: the server responded with a status of 403 ()
swagger-ui-bundle.js Failed to load resource: the server responded with a status of 403 ()
swagger-ui-standalone-preset.js Failed to load resource: the server responded with a status of 403 ()
springfox.js Failed to load resource: the server responded with a status of 403 ()
webjars/springfox-swagger-ui/favicon-32x32.png?v=2.8.0-SNAPSHOT Failed to load resource: the server responded with a status of 403 ()
webjars/springfox-swagger-ui/favicon-16x16.png?v=2.8.0-SNAPSHOT Failed to load resource: the server responded with a status of 403 ()
springfox.css Failed to load resource: the server responded with a status of 403 ()
swagger-ui.css Failed to load resource: the server responded with a status of 403 ()

J'utilise Spring Boot Security et j'ai ajouté ceci à ma configuration de sécurité :

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/v2/api-docs/**");
    web.ignoring().antMatchers("/swagger.json");
    web.ignoring().antMatchers("/swagger-ui.html");
}

Quelqu'un peut-il m'aider ?

10voto

Indra Basak Points 4680

Essayez d'ajouter les ressources suivantes dans la liste des ressources ignorées,

  • /swagger-resources/**
  • /webjars/**

Voici l'exemple complet,

@Override
public void configure(WebSecurity web) throws Exception {    
    web.ignoring().antMatchers("/v2/api-docs/**");
    web.ignoring().antMatchers("/swagger.json");
    web.ignoring().antMatchers("/swagger-ui.html");
    web.ignoring().antMatchers("/swagger-resources/**");
    web.ignoring().antMatchers("/webjars/**");
}

6voto

rieckpil Points 1620

Vous devez ignorer explicitement toutes les ressources statiques requises pour swagger dans votre configuration de sécurité Spring. Le message d'erreur que vous obtenez de l'onglet réseau indique que le navigateur est capable de charger le fichier swagger-ui.html mais ne parvient pas à charger le fichier .js/.css/images/icons parce qu'ils ne sont pas ignorés dans votre configuration de sécurité.

Essayez cette solution :

@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources", "/configuration/security", "/swagger-ui.html", "/webjars/**");
    }

}

Article connexe de stackoverflow : Comment configurer Spring Security pour permettre l'accès à l'URL Swagger sans authentification ?

0voto

joeabala Points 21

Ce qui me manquait, c'était d'étendre le WebMvcConfigurationSupport dans la configuration Swagger et de surcharger la méthode addResourceHandlers comme ci-dessous :

@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport{

    @Bean
    public Docket api() {

    }

    private ApiInfo metadata() {
    }

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X