允许匿名访问 springdoc-openapi-ui Spring 安全
Allow anonymous access to springdoc-openapi-ui with Spring Security
如何在受 Spring 安全保护的 Spring 启动应用程序中允许匿名访问 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()
}
}
确保项目具有以下依赖项:
除了 Evgeniy 的回答之外,我还添加了适当的配置以避免与 Swagger UI(例如 js、html、图像和其他文件)中使用的文档提取发生冲突,也在安全配置 class 像这样:
@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
。
要在 spring webflux 中获得访问权限,您必须执行以下操作,已使用 spring-doc 版本 1.5.2 进行测试:
Swagger 网页在路径为 /webjars/swagger-ui
.
的 html 资源上失败
@Configuration
@EnableWebFluxSecurity
public class WebSecurityConfig {
@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();
}
}
如何在受 Spring 安全保护的 Spring 启动应用程序中允许匿名访问 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()
}
}
确保项目具有以下依赖项:
除了 Evgeniy 的回答之外,我还添加了适当的配置以避免与 Swagger UI(例如 js、html、图像和其他文件)中使用的文档提取发生冲突,也在安全配置 class 像这样:
@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
。
要在 spring webflux 中获得访问权限,您必须执行以下操作,已使用 spring-doc 版本 1.5.2 进行测试:
Swagger 网页在路径为 /webjars/swagger-ui
.
@Configuration
@EnableWebFluxSecurity
public class WebSecurityConfig {
@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();
}
}