2014-10-10 16 views
9

tôi sử dụng:mùa xuân-an ninh java cấu hình: Làm thế nào để cấu hình Nhiều trường hợp AuthenticationManager

  • khởi động mùa xuân: 1.1.7
  • mùa xuân-an ninh: 4.0.0.M2
  • mùa xuân-fmk: 4.1 .1.RELEASE

Mọi thứ đều được cấu hình với Java Config (bao gồm cả mùa xuân-an ninh)

tôi đang làm việc trên một máy chủ web p roject trong đó Xác thực: Tiêu đề cơ bản64Gibberish cơ bản được sử dụng để xác thực người dùng.

Vấn đề là tùy thuộc vào URI các AuthenticationManager là khác nhau (vì tôi cần 2 khác nhau UserDetailsService.

  • /URI1/** => authManager1
  • /URI2/** => authManager2

tôi đã thử nhiều phần mở rộng của WebSecurityConfigurerAdapter với

@Override 
@Bean(name = "authManager1") 
public AuthenticationManager authenticationManagerBean() throws Exception 
@Override 
@Bean(name = "authManager2") 
public AuthenticationManager authenticationManagerBean() throws Exception 

vô ích

tôi luôn luôn nhận được:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springSecurityFilterChain' 
defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: Instantiation of bean failed; 
nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: 
Factory method [public javax.servlet.Filter org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration.springSecurityFilterChain() throws java.lang.Exception] 
threw exception; nested exception is java.lang.IllegalArgumentException: 
Expecting to only find a single bean for type interface org.springframework.security.authentication.AuthenticationManager, 
but found [authManager1, authManager2] 

Kể từ khi tôi có nhiều chuỗi bộ lọc bảo mật làm thế nào tôi có thể "nói" mùa xuân-an ninh để tiêm AuthenticationManager khác nhau trong chuỗi bộ lọc bảo mật khác nhau ?

Cảm ơn trước P.

Trả lời

11

Bạn có thể có nhiều yếu tố cấu hình http, đều có riêng của mình AuthenticationManager. Nó có thể trông giống như vậy:

@Configuration 
@EnableWebSecurity 
public class SecurityConfig { 

    @Bean 
    private AuthenticationManager authenticationManager1() { 
     // defines first AuthenticationManager 
     return authenticationManager; 
    } 

    @Bean 
    private AuthenticationManager authenticationManager2() { 
     // defines second AuthenticationManager 
     return authenticationManager; 
    } 

    @Configuration 
    @Order(1) 
    public static class Uri1ApiConfigurationAdapter extends WebSecurityConfigurerAdapter { 

     @Autowired 
     @Qualifier(authenticationManager1) 
     private authManager1; 

     @Override 
     protected AuthenticationManager authenticationManager() { 
      return authManager1; 
     } 

     protected void configure(HttpSecurity http) throws Exception { 
      http 
       .antMatcher("/URI1/**") 
       ... 
     } 
    } 

    @Configuration 
    @Order(2) 
    public static class Uri2ApiConfigurationAdapter extends WebSecurityConfigurerAdapter { 

     @Autowired 
     @Qualifier(authenticationManager2) 
     private authManager2; 

     @Override 
     protected AuthenticationManager authenticationManager() { 
      return authManager2; 
     } 

     protected void configure(HttpSecurity http) throws Exception { 
      http 
       .antMatcher("/URI2/**") 
       ... 
     } 
    } 
} 
+0

Cảm ơn rất nhiều. Nó hoạt động. – paskos

Các vấn đề liên quan