Swagger ui 未加载 Oauth2
Swagger ui is not getting loaded with Oauth2
我开发了一个带有 spring 引导和 oauth2 的演示应用程序。我有以下三个应用程序。
- 资源api:这将包含我们需要保护的所有方法。
- 身份验证服务器:这是一个提供令牌的 oauth2 服务器
- 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();
另一种选择(如果对您安全的话)是让 Spring 安全性完全忽略 /swagger-ui
路径。
在您的安全 @Configuration
文件中扩展 WebSecurityConfigurerAdapter
并添加以下内容:
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers(HttpMethod.GET, "/swagger-ui/**");
super.configure(web);
}
如果您使用的是 Swagger2,请尝试允许:
http.authorizeRequests().antMatchers("/configuration/**","/swagger**","/webjars/**","/v2/**").permitAll();
使其正常工作。
这是一个适合我的配置:
.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
}
}
在我的例子中,使用 Spring Security 5 和 OAuth2 以及 Spring Actuator 和 Swagger/Swagger-UI 我不得不用这个 class 覆盖 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()
;
}
}
我开发了一个带有 spring 引导和 oauth2 的演示应用程序。我有以下三个应用程序。
- 资源api:这将包含我们需要保护的所有方法。
- 身份验证服务器:这是一个提供令牌的 oauth2 服务器
- 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();
另一种选择(如果对您安全的话)是让 Spring 安全性完全忽略 /swagger-ui
路径。
在您的安全 @Configuration
文件中扩展 WebSecurityConfigurerAdapter
并添加以下内容:
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers(HttpMethod.GET, "/swagger-ui/**");
super.configure(web);
}
如果您使用的是 Swagger2,请尝试允许:
http.authorizeRequests().antMatchers("/configuration/**","/swagger**","/webjars/**","/v2/**").permitAll();
使其正常工作。
这是一个适合我的配置:
.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
}
}
在我的例子中,使用 Spring Security 5 和 OAuth2 以及 Spring Actuator 和 Swagger/Swagger-UI 我不得不用这个 class 覆盖 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()
;
}
}