2017-08-18 4 views
1

I indem Sie die folgende Klasse zu meinem Code eine einfache Prahlerei UI zu meinem bestehenden springboot REST API hinzugefügt:Frühlings-Boot-Swagger UI - UI Zugriff schützen

@EnableSwagger2 
@Configuration 
public class SwaggerConfig {          
    @Bean 
    public Docket api() { 
     return new Docket(DocumentationType.SWAGGER_2) 
      .select() 
      .paths(PathSelectors.regex("/v1.*")) 
      .build() 
      .pathMapping("/") 
      .apiInfo(metadata()); 
    } 


    private ApiInfo metadata() { 
     return new ApiInfoBuilder() 
      .title("My awesome API") 
      .description("Some description") 
      .version("1.0") 
      .build(); 
     } 
} 

Mein Problem ist, dass die API öffentlich sein soll, aber die Swagger-Dokumente sollten nicht. Ich möchte eine Möglichkeit, um eine Authentifizierung zu der Swagger-Dokumentation anzufordern, kennt jemand eine einfache Möglichkeit, dies zu erreichen?

Ich habe versucht, es zu googeln, aber ich kann nur Oath Sachen, aber das ist die Authentifizierung für die Endpunkte nicht die Prahlerei Dokumentation ...

Antwort

4

Swagger docs verfügbar sein wird bei /v2/api-docs Endpunkt finden wenn Swagger mit Spring-Boot-Anwendung integriert.

Inorder die Ressource zu schützen, die Verwendung von Feder Sicherheit machen und den Endpunkt für den Zugriff auf die Dokumentation beschränken

 <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 

Sicherheitskonfiguration: Beschränkung des Zugriffs auf den Endpunkt nur an die Benutzer

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .authorizeRequests()    
       .antMatchers("/v2/api-docs").authenticated() 
       .and() 
       .httpBasic(); 

    } 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
      .inMemoryAuthentication() 
       .withUser("user").password("password").roles("USER"); 
    } 
} 

Darüber hinaus kann swagger-ui.html auch basierend auf der Anforderung gesichert werden.

+1

Vielen Dank, das war genau das, was ich gesucht habe – Ernanirst