启用S​​pring OAuth2 ResourceServer会禁用UsernamePasswordAuthenticationFilter

时间:2015-10-16 10:33:57

标签: authentication spring-security spring-security-oauth2

我的WebSecurityConfigurerAdaptor中有以下内容:

protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .antMatchers("/login.jsp").permitAll()
            .anyRequest().authenticated()
            .and()
        .exceptionHandling()
            .accessDeniedPage("/login.jsp?authorization_error=true")
            .and()
        .csrf()
            .disable()
        .formLogin()
            .loginProcessingUrl("/login")
            .loginPage("/login.jsp")
            .failureUrl("/login.jsp?authentication_error=true");
}

我有一个OAuth2客户端(用PHP编写),可以在获取有效的访问令牌之前重定向到/ login。

然后我尝试启用ResourceServerConfigurerAdapter

@Configuration
@EnableResourceServer
protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(ResourceServerSecurityConfigurer resources)
            throws Exception {
        resources.resourceId("myResource").stateless(false);
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
            .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
                .and()
            .requestMatchers()
                .antMatchers("/me")
                .and()
            .authorizeRequests()
                .antMatchers("/me").access("#oauth2.hasScope('email')");
    }

}

启用ResourceServer后,永远不会调用UsernamePasswordAuthenticationFilter,并且/ login会返回HTTP 404错误。

我多次阅读示例Spring OAuth2应用程序sparklr2和tonr2,但我无法弄清楚我的代码有什么问题。

1 个答案:

答案 0 :(得分:2)

追踪是一个非常困难的错误。

我的代码最初使用的是Spring Security版本4.0.2.RELEASE和Spring版本4.2.2.RELEASE。一旦我改变我的maven pom.xml以使用Spring Security版本3.2.8.RELEASE和Spring版本4.1.8.RELEASE,我的代码就可以了。

可能与以下错误有关: resource server security custom request matching ignored