各タイプの認証に別々のWebSecurityConfigurerAdapterを使用して、アプリケーションに複数の認証タイプを設定しようとしています。複数のWebSecurityConfigurerAdapterおよびFilter Chains
一般的な考え方は、WebSecurityConfigurerAdapter configure(HttpSecurity http)メソッドを使用してURLパターンを照合し、専用の専用フィルター(許可を含む)を使用してすべての認証を行うことです。
@Configuration
@EnableWebSecurity
public class DemoMultipleWebSecurityConfigurerAdapter {
@Order(1)
@Configuration
public static class BasicSecurityAdapter extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
String endpointPattern = "/api/basic/**";
http.requestMatchers().antMatchers(endpointPattern);
http.csrf().ignoringAntMatchers(endpointPattern);
http.authorizeRequests().antMatchers(endpointPattern).authenticated();
http.addFilterBefore(new MyBasicAuthFilter(), LogoutFilter.class);
}
}
@Order(2)
@Configuration
public static class SSOSecurityAdapter extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
String endpointPattern = "/api/sso/**";
http.requestMatchers().antMatchers(endpointPattern);
http.csrf().ignoringAntMatchers(endpointPattern);
http.authorizeRequests().antMatchers(endpointPattern).authenticated();
http.addFilterBefore(new MySSOAuthFilter(), LogoutFilter.class);
}
}
}
初期化中に、私はしかしと呼ばれるフィルター・チェーンを実行時に各WebSecurityConfigurerAdapterは(独自のフィルター・チェーンを持っていると仮定されている)を設定するHttpSecurityの別のインスタンスを取得していることがわかりますが常にのために作成したものです最初のWebSecurityConfigurerAdapterはどのエンドポイントで呼び出すかにかかわらず。
ドキュメントによると、SpringはHttpSecurityインスタンスを使用して(URLパターンに従って)フィルタリングする正しいフィルタチェーンを見つけることになっています。
私が間違っていることに関するアイデアはありますか? (私はこれをテストするためにSpring 1.5.6-RELEASEを使用しています)
これは、SpringがSpringに登録したFilterの中の適切なFilterにルーティングするために使用しているのと同じマッチングコンポーネントを使用していたことです。 –