允许匿名访问 springdoc-openapi-ui with Spring Security



如何在由Spring Security保护的Spring Boot应用程序中允许匿名访问springdoc-openapi-ui(OpenAPI 3.0/swagger-ui.html(?

要使用 springdoc-openapi-ui/swagger-ui.html,请使用permitAll方法允许匿名访问WebSecurityConfigurerAdapter中的以下端点:

  • /v3/api-docs/**
  • /swagger-ui/**
  • /swagger-ui.html

例:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.
.authorizeRequests()
.antMatchers("/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html").permitAll()
.anyRequest().authenticated()
.and()
.httpBasic(); //or anything else, e.g. .oauth2ResourceServer().jwt()
}
}

确保项目具有以下依赖项:

  • org.springdoc:springdoc-openapi-ui
  • org.springdoc:springdoc-openapi-security

要在 spring webflux 中获得访问权限,您必须执行以下操作,并使用 spring-doc 版本 1.5.2 进行测试:

招摇网页在路径/webjars/swagger-ui的 html 资源上失败。

@Configuration
@EnableWebFluxSecurity
public class SecurityConfig {
@Bean
SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
return http.authorizeExchange()
.pathMatchers("/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html", "/webjars/swagger-ui/**")
.permitAll()
.anyExchange()
.authenticated()
.and()
.build();
}
}

除了 Evgeniy 的回答之外,我还会添加正确的配置以避免与 Swagger UI 中使用的文档获取(例如 js、html、图像和其他文件(发生冲突,同样在 SecurityConfig 类中也是如此:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
//Other configuration methods

@Override
public void configure(WebSecurity web) {
web.ignoring()
.antMatchers("/v3/api-docs/**", "/swagger-ui/**");
}
}

如果没有此配置,即使 UI 看起来像已加载,在加载上述文件时后台调用也可能会出现401: Unauthorized

最新更新