基于this Answer,我正试图在我的春季应用程序中保护除登录页面之外的所有内容。
所以我将这个Java配置文件用于OAuth2
extends
的{{1}}:
ResourceServerConfigurerAdapter
@Override
public void configure(final HttpSecurity http) throws Exception {
http
.requestMatchers()
.antMatchers("/**")
.and()
.authorizeRequests()
.anyRequest()
.authenticated()
.antMatchers("/login")
.permitAll()
{{/}>的extends
OAuth2SsoConfigurerAdapter
所以,我想要的是为每个请求 @Override
public void match(RequestMatchers matchers) {
matchers.antMatchers("/login");
}
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest()
.authenticated()
}
而不是http 401
。
如果执行登录请求,/login
注释将用于将其重定向到OAuth2服务器。
更新1
更改过滤器@EnableOAuth2Sso
的顺序后,找不到/ login请求。
ResourceServerConfigurerAdapter
此请求将是未经授权的,因为提供了任何令牌
http
.requestMatchers()
.antMatchers("/**")
.and()
.authorizeRequests()
.antMatchers("/login")
.permitAll()
.anyRequest()
.authenticated()
http 401 Unauthorized(good)~/
http 401 Unauthorized(good)但找不到登录页面:
~/resource
http 404 Not Found(bad)
当~/login
被击中时,正确的功能应该是到OAuth2服务器的http 302重定向。