2

我已經開發了一個彈簧啓動和oauth2演示應用程序。我有三個應用程序如下。Swagger UI沒有加載Oauth2

  1. 資源api:這將有我們需要保護的所有方法。
  2. 驗證服務器:這是一個提供令牌的oauth2服務器
  3. UI:在通過驗證服務器成功登錄後,它將能夠訪問資源。

我有很少的資源(控制器)可以公開訪問。但是當我試圖訪問這個swagger UI時,它會要求我進行完整的身份驗證。當我添加下面的代碼時,swagger頁面即將到來,但不僅僅是整個頁面中的一個下拉菜單,而且也被打破。

http 
.anonymous() //allow anonymous access 
.and() 
.authorizeRequests() 
.antMatchers("/shouldbepublic/**", "/swagger-ui**/**").permitAll().and() //this should be public resources 
.formLogin().loginPage("/login").permitAll() 
.and() 
.requestMatchers().antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access") 
.and() 
.authorizeRequests().anyRequest().authenticated(); 
+0

你是否使用springfox-swagger-ui作爲依賴項? –

回答

0

這裏是爲我工作的配置:

.antMatchers("/swagger-ui.html","/swagger-resources/**", "/v2/api-docs/**").permitAll()'.antMatchers("/swagger-ui.html","/swagger-resources/**", "/v2/api-docs/**").permitAll()

沒有了招搖,ui.html無法顯示

完整ResourceServiceConfiguration可以在這裏找到:

@Configuration 
@EnableResourceServer 
public static class ResourceServiceConfiguration extends ResourceServerConfigurerAdapter { 

    @Override 
    public void configure(final HttpSecurity http) throws Exception { 
    // @formatter:off 
    http.csrf().disable().authorizeRequests() 
    // This is needed to enable swagger-ui interface. 
    .antMatchers("/swagger-ui.html","/swagger-resources/**", "/v2/api-docs/**").permitAll() 
    .antMatchers("/**").hasAuthority("ADMIN"); 
    // @formatter:on 
    } 
} 
0

另一種選擇(如果它是你安全的)是有春季安全完全忽略/swagger-ui路徑。如果您正在使用Swagger2嘗試允許

@Override 
public void configure(WebSecurity web) throws Exception { 
    web.ignoring().antMatchers(HttpMethod.GET, "/swagger-ui/**"); 
    super.configure(web); 
} 
+0

感謝Marco,我會盡力讓你知道! – Sam

0

在您的安全@Configuration文件擴展WebSecurityConfigurerAdapter,並添加以下

http.authorizeRequests().antMatchers("/configuration/**","/swagger**","/webjars/**","/v2/**").permitAll(); 

得到它的工作。