2016-08-20 2 views
0

Ich habe folgende this article, um Swagger auf meiner Spring-Boot-App zu konfigurieren. Hier ist meine SwaggerConfig KlasseKonfigurieren von Swagger für Spring-Boot-App

package com.path.to.project.config; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import springfox.documentation.builders.PathSelectors; 
import springfox.documentation.builders.RequestHandlerSelectors; 
import springfox.documentation.spi.DocumentationType; 
import springfox.documentation.spring.web.plugins.Docket; 
import springfox.documentation.swagger2.annotations.EnableSwagger2; 

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

Hier ist meine WebSecurityConfig Klasse

package com.path.to.project.config; 

import com.path.to.project.jwt.JwtAuthenticationEntryPoint; 
import com.path.to.project.jwt.JwtAuthenticationTokenFilter; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; 
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; 
import org.springframework.security.config.annotation.web.builders.HttpSecurity; 
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 
import org.springframework.security.config.http.SessionCreationPolicy; 
import org.springframework.security.core.userdetails.UserDetailsService; 
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 
import org.springframework.security.crypto.password.PasswordEncoder; 
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; 

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private JwtAuthenticationEntryPoint unauthorizedHandler; 

    @Autowired 
    private UserDetailsService userDetailsService; 

    @Autowired 
    public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception { 
     authenticationManagerBuilder.userDetailsService(userDetailsService) 
       .passwordEncoder(passwordEncoder()); 
    } 

    @Bean 
    public JwtAuthenticationTokenFilter authenticationTokenFilterBean() throws Exception { 
     return new JwtAuthenticationTokenFilter(); 
    } 

    @Override 
    protected void configure(HttpSecurity httpSecurity) throws Exception { 
     httpSecurity 
       .csrf().disable() 
       .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and() 
       .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() 
       .authorizeRequests() 
       .antMatchers("/auth/**").permitAll() 
       .antMatchers("/register/**").permitAll() 
       .antMatchers("/swagger-ui*").permitAll() 
       .antMatchers("/sysadmin/**").hasRole("SYSADMIN") 
       .antMatchers("/admin/**").hasRole("ADMIN") 
       .antMatchers("/siteadmin/**").hasRole("SITEADMIN") 
       .anyRequest().authenticated(); 

     // Custom JWT based security filter 
     httpSecurity 
       .addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class); 

    } 

    @Bean 
    public PasswordEncoder passwordEncoder() { 
     PasswordEncoder encoder = new BCryptPasswordEncoder(); 
     return encoder; 
    } 

} 

Also, wenn ich laufen feder Boot-Anwendung (i intellij bin mit aufzubauen und zu implementieren auf JBoss) Ich sehe folgende UI

Swagger UI on local spring-boot app

Was bin ich hier fehlt?

+0

Verwenden Sie JAR- oder WAR-Bereitstellung? Wo befinden sich Ihre JS/CSS-Dateien derzeit? – luboskrnac

Antwort

0

Sieht so aus, als würde Ihr CSS/JS nicht geladen. Ich würde in Ihrem Browserprotokoll überprüfen, welche URL für die Anforderung verwendet wird, und die httpSecurity so einrichten, dass diese Ressourcen ähnlich Ihren vorhandenen Sicherheitsrollen geladen werden.

+0

okay danke für den Hinweis. Dies könnte an meiner Sicherheitskonfiguration liegen. Ich kann Regeln für '.css' und' .js' Dateien hinzufügen, aber selbst wenn CSS/JS nicht geladen wird, warum zeigt mir ** swagger ** nicht api und seine Methoden? es hat nichts mit der '.css/js' zu tun? –

+0

Nur Raten, aber die Standard Swagger UI benötigt Zugriff auf die Datei swagger.json vom Server. Wenn die '.css' und' .js' Dateien nicht geladen werden, dann rate ich, dass die swagger Datei nicht geladen wird. –

0

In WebSecurityConfig, fügen Regel folgende

.antMatchers ("/ v2/api-docs", "/ configuration/ui", "/ Prahlerei-Ressourcen", "/ configuration/Sicherheit", „/ Prahlerei -ui.html ","/webjars/** "). permitAll()

/v2/api-docs - Dies ermöglicht Federsicherheit, API und seine Methoden zu zeigen. Sie können das Problem identifizieren, indem Sie den Netzwerkverkehr im Firebug- oder Chrome-Debug-Modus überwachen

Verwandte Themen