Пользовательский интерфейс Swagger не загружается с Oauth2

Я разработал одно демонстрационное приложение с весенней загрузкой и oauth2. У меня есть три приложения, как показано ниже.

  1. Resource api: у него будут все методы, которые нам нужны для защиты.
  2. Сервер аутентификации: это сервер oauth2, который предоставляет токены
  3. Пользовательский интерфейс: который сможет получить доступ к ресурсам после успешного входа в систему через сервер аутентификации.

У меня есть несколько ресурсов (контроллеров), к которым можно получить публичный доступ. Но когда я пытаюсь получить доступ к пользовательскому интерфейсу swagger, он запрашивает полную аутентификацию. Когда я добавил приведенный ниже код, появляется страница 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();

person Sam    schedule 10.05.2016    source источник
comment
Вы используете springfox-swagger-ui в качестве зависимости?   -  person Daniel Olszewski    schedule 11.05.2016


Ответы (4)


Вот конфигурация, которая работает для меня:

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

без этого swagger-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
  }
}
person Jiujiu    schedule 28.02.2017

Другой вариант (если это безопасно для вас) — заставить Spring Security полностью игнорировать путь /swagger-ui.

В вашем файле безопасности @Configuration расширьте WebSecurityConfigurerAdapter и добавьте следующее:

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers(HttpMethod.GET, "/swagger-ui/**");
    super.configure(web);
}
person Marco Lenzo    schedule 11.05.2016
comment
Спасибо Марко, я постараюсь и дам вам знать! - person Sam; 14.05.2016

Если вы используете Swagger2, попробуйте разрешить:

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

чтобы заставить его работать.

person Heisenberg    schedule 14.07.2016

В моем случае с Spring Security 5 и OAuth2 и Spring Actuator и Swagger/Swagger-UI мне пришлось переопределить Spring Security с помощью этого класса:

@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(final HttpSecurity http) throws Exception {
        http
            .antMatcher("/**")
                .authorizeRequests()
            .antMatchers(
                    "/",
                    "/actuator/**",
                    "/v2/api-docs/**",
                    "/swagger-ui.html",
                    "/swagger-resources/**",
                    "/webjars/**"
                )
                .permitAll()
            .anyRequest()
                .authenticated()
            .and()
            .oauth2Login()
        ;
    }

}
person José Carlos Monteiro    schedule 08.06.2020