2017-06-20 8 views
2

私のアプリケーションには2つの異なるセキュリティ設定があります。一方はOAuth2SecurityConfigurationで、他方はLdapSecurityConfigurationです。春のセキュリティで私の別のフィルタの前にフィルタを追加するには?

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
      .csrf().disable() 
      .exceptionHandling() 
      .authenticationEntryPoint(authenticationEntryPoint) 
      .and() 
       .authorizeRequests() 
       .antMatchers(OAUTH_ENDPOINT).permitAll() 
       .anyRequest().authenticated() 
      .and() 
       .logout() 
       .logoutUrl(LOGOUT_ENDPOINT) 
       .logoutSuccessUrl("/") 
       .addLogoutHandler(oAuthLogoutHandler) 
      .and() 
       .addFilterAfter(oAuth2ClientContextFilter, ExceptionTranslationFilter.class) 
       .addFilterBefore(oAuth2AuthenticationProcessingFilter, FilterSecurityInterceptor.class) 
       // anonymous login must be disabled, 
       // otherwise an anonymous authentication will be created, 
       // and the UserRedirectRequiredException will not be thrown, 
       // and the user will not be redirected to the authorization server 
       .anonymous().disable(); 
} 

LdapSecurityConfigurationセキュリティ設定:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
      .csrf().disable() 
      .exceptionHandling() 
      .authenticationEntryPoint(restAuthenticationEntryPoint) 
      .and() 
       .authorizeRequests() 
       .antMatchers(AUTH_ENDPOINT).permitAll() 
       .anyRequest().authenticated() 
      .and() 
       .logout() 
      .and() 
       .addFilterBefore(authenticationFilter, OAuth2ClientContextFilter.class); 
} 

しかし、フィルタチェーンが、私はこのエラーを取得する初期化されます。

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is java.lang.IllegalArgumentException: Cannot register after unregistered Filter class org.springframework.security.oauth2.client.filter.OAuth2ClientContextFilter 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) 
    ... 36 more 
Caused by: java.lang.IllegalArgumentException: Cannot register after unregistered Filter class org.springframework.security.oauth2.client.filter.OAuth2ClientContextFilter 
    at org.springframework.security.config.annotation.web.builders.FilterComparator.registerBefore(FilterComparator.java:183) 
    at org.springframework.security.config.annotation.web.builders.HttpSecurity.addFilterBefore(HttpSecurity.java:1039) 
    at com.company.configuration.LdapSecurityConfiguration.configure(LdapSecurityConfiguration.java:63) 
    at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.getHttp(WebSecurityConfigurerAdapter.java:224) 
    at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.init(WebSecurityConfigurerAdapter.java:315) 
    at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.init(WebSecurityConfigurerAdapter.java:86) 
    at com.company.configuration.LdapSecurityConfiguration$$EnhancerBySpringCGLIB$$b4922dd5.init(<generated>) 
    at org.springframework.security.config.annotation.AbstractConfiguredSecurityBuilder.init(AbstractConfiguredSecurityBuilder.java:371) 
    at org.springframework.security.config.annotation.AbstractConfiguredSecurityBuilder.doBuild(AbstractConfiguredSecurityBuilder.java:325) 
    at org.springframework.security.config.annotation.AbstractSecurityBuilder.build(AbstractSecurityBuilder.java:41) 
    at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration.springSecurityFilterChain(WebSecurityConfiguration.java:104) 
    at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration$$EnhancerBySpringCGLIB$$33ca6b4e.CGLIB$springSecurityFilterChain$3(<generated>) 
    at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration$$EnhancerBySpringCGLIB$$33ca6b4e$$FastClassBySpringCGLIB$$b8c23686.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) 
    at org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration$$EnhancerBySpringCGLIB$$33ca6b4e.springSecurityFilterChain(<generated>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) 
    ... 37 more 

答えて

0

How to add filter before my another filter in spring-security?

OAuth2SecurityConfigurationで、私は2 filteresでセキュリティ設定を以下していますaddFilterBefore

Cannot register after unregistered Filter

だけあなたが前にそれを追加しようとしている1は、実際にそこに問題は次の2つの別々の構成を有している

ある場合。正しい順序(Orderedまたは@Order)で適用されていることを確認するか、単一の構成にそれらをマージする必要があります。

コンフィグレーションでlogout()exceptionHandling()を別々に設定しようとしていることにも注意してください。あなたはそれを両方の方法で持つことはできません。

+0

私の 'OAuth2SecurityConfiguration'には' @Order(1) 'が、' LdapSecurityConfiguration'には '@Order(2)'があります。 –

+0

@VladislavChernogorov: 'OAuth2ClientContextFilter'は' LdapSecurityConfiguration'に登録されていないので、存在しない 'OAuth2ClientContextFilter'の前に別のフィルタを追加することはできません。 @ OrangeDogの回答はちょっと混乱します。例外は設定の順序とは関係がないからです。 – dur

+0

他の設定がまだ登録されていないか、設定が競合しているため、登録されていません。 @Orderはここでは何の効果もありません。 – OrangeDog

関連する問題