Spring OAuth Filter Chain& Java配置

时间:2015-08-11 18:59:44

标签: spring oauth spring-security oauth-2.0

我尝试使用spring-security将spring-security-oauth添加到现有应用中。我正在使用Java配置。

我已经修改了现有的过滤器链(添加了一些自定义过滤器),但是请求' / oauth / token'没有使用它,但正在使用'默认'过滤链。如何才能访问保护oauth端点的过滤器链,以便我可以在那里使用自定义过滤器,还是可以将OAuth端点连接到现有设置中?

2 个答案:

答案 0 :(得分:3)

使用界面AuthorizationServerConfigurer确实有一种稍微平滑的方式。 您可以坚持注释@EnableAuthorizationServer并在配置文件中实现上面的接口。这将使您能够通过执行以下操作来更改oauth2-filter-chain:

@Configuration
@EnableWebSecurity
@EnableAuthorizationServer
public class SecurityConfig extends WebSecurityConfigurerAdapter 
implements AuthorizationServerConfigurer
    // some configuration ...

    public void configure(AuthorizationServerSecurityConfigurer oauthSecurity) throws Exception {
        oauthSecurity.addTokenEndpointAuthenticationFilter(new YourFilter());
    }

    // more configuration ...
}

addFilterXYX - HttpSecurity的方法相比,您在此处没有细粒度的影响,其中过滤器将位于过滤器链中。由addTokenEndpointAuthenticationFilter添加的所有过滤器都将插入BasicAuthenticationFilter

之前

如果您需要以更详细的方式控制过滤器的位置,则可以创建一个扩展AuthorizationServerConfigurerAdapter而不是使用注释@EnableAuthorizationServer的bean。我没有尝试,但我想你可以扩展AuthorizationServerSecurityConfiguration像systemfreund建议,而不必指定@Order(-1)因为只导入自定义配置。您可能还需要@Import AuthorizationServerEndpointsConfiguration,就像在便捷注释@EnableAuthorizationServer中完成一样。

答案 1 :(得分:2)

这可能不是最好的方法,但我没有找到更好的方法。我们的想法是提供自定义AuthorizationServerSecurityConfiguration实例,并通过@Import覆盖@EnableAuthorizationServer的默认实例。我们只需要确保添加@Order注释,其优先级高于默认配置:

@EnableAuthorizationServer
@Import(CustomSecurityConfig.class)
public class Application {
}

@Configuration
@Order(-1)
public class CustomSecurityConfig extends AuthorizationServerSecurityConfiguration {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http); // do the default configuration first

        http
            .addFilterBefore(new MyFilter(), ...);
    }

}