2014-09-20 23 views
10

Tôi đang làm việc trên cấu hình dựa trên Java của Spring Security.Cách Spring Security thêm/cấu hình AuthenticationManagerBuilder?

Tôi đã tạo riêng mình MyAuthenticationProvider mà tôi muốn đăng ký trong ProviderManager (ví dụ đơn lẻ AuthenticationManager).

Tôi đã tìm thấy rằng ProviderManager có danh sách các nhà cung cấp mà tôi có thể đăng ký MyAuthenticationProvider của mình.

Dưới đây là một phần của cấu hình của tôi:

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth.authenticationProvider(MyAuthenticationProvider); 
    } 
} 

tôi phát hiện ra rằng AuthenticationManagerBuilderparentAuthenticationManager, defaultUserDetailsService và nhiều lĩnh vực khác.

Câu hỏi của tôi là:

  1. đâu @Autowired chú thích này thêm AuthenticationManagerBuilder auth từ đâu? Có phải AuthenticationManagerBuilder đã được tạo trong ngữ cảnh ứng dụng không?
  2. Trạng thái mặc định là AuthenticationManagerBuilder nào đang được tiêm? Theo mặc định, ý tôi là sẽ có một số parentAuthenticationManager, authenticationProvider s đã được đăng ký trong số AuthenticationManagerBuilder?
  3. Nếu tôi thêm auth.authenticationProvider(MyAuthenticationProvider), điều này có nghĩa là tôi đang thêm một nhà cung cấp khác trong số AuthenticationManagerBuilder?
  4. Điều này có nghĩa là gì? Lấy từ Tài Liệu Mùa Xuân

    Tên của phương thức configureGlobal không quan trọng. Tuy nhiên, nó là quan trọng để chỉ định cấu hình AuthenticationManagerBuilder trong một lớp được chú thích bằng @EnableWebSecurity, @EnableWebMvcSecurity, @EnableGlobalMethodSecurity hoặc @EnableGlobalAuthentication. Làm nếu không có kết quả không thể đoán trước.

Trả lời

1

trả lời cho 3:

Yes. Mã của AuthenticationManagerBuilder thêm nhà cung cấp của bạn:

public AuthenticationManagerBuilder authenticationProvider(AuthenticationProvider authenticationProvider) { 
    this.authenticationProviders.add(authenticationProvider); 
    return this; 
} 

trả lời cho 4 là đơn giản:

Điều đó có nghĩa rằng, một khi bạn có một trong các chú thích đó, bạn có thể đặt tên phương pháp của bạn như bạn muốn:

@Configuration 
@EnableWebSecurity //or @EnableWebMvcSecurity or @EnableGlobalMethodSecurity.... 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    public void myCoolMethodName(AuthenticationManagerBuilder auth) throws Exception { 
     auth.authenticationProvider(MyAuthenticationProvider); 
    } 
} 

"Làm cách khác có kết quả không thể đoán trước"

Nếu bạn giữ tên chứ không phải chú thích, nó có thể không hoạt động.

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