Làm việc trên di chuyển từ cấu hình xml bảo mật mùa xuân sang Java Config trong Spring Security.Khởi động mùa xuân, ghi đè bảo mật mùa xuân UserDetailsService
Trong lớp SecurityConfiguration của tôi mở rộng WebSecurityConfigurerAdapter. Tuy nhiên, vấn đề là userDetailsService không được sử dụng bởi các bộ lọc bảo mật đặc biệt là UsernamePasswordAuthenticationFilter. Tôi nhìn vào khởi động và có vẻ như điều này không được tạo trước khi khởi động Spring tạo ra InMemoryUserDetailsManager mặc định.
@Configuration
@EnableWebMvcSecurity
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http)
throws Exception {
http.userDetailsService(userDetailsService);
}
}
Tôi cũng đã cố gắng ghi đè userDetailsServiceBean và userDetailsService trong lớp này bằng cách sử dụng ApplicationUserDetailsService được tiêm tùy chỉnh.
@Bean(name="myUserDetailsBean")
@Override
public UserDetailsService userDetailsServiceBean() {
return userDetailsService;
}
@Override
public UserDetailsService userDetailsService() {
return userDetailsService;
}
Tuy nhiên, khi tôi cố gắng để ghi đè lên authenticationManagerBean có vẻ như nó gọi cấu hình của tôi trước khi cấu hình khởi động mùa xuân khởi nhưng nó ném một lỗi (dưới đây) rằng có một tham chiếu vòng tròn khi khởi tạo UsernamePasswordAuthenticationFilter. Tôi có thực sự cần phải ghi đè lên authenticationManagerBean vì tôi cần phải xác định những gì đi vào UsernamePasswordAuthenticationFilter.
@Bean(name="myAuthenticationManager")
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
..
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter]: Circular reference involving containing bean 'securityBeansConfiguration' - consider declaring the factory method as static for independence from its containing instance. Factory method 'usernamePasswordAuthenticationFilter' threw exception; nested exception is java.lang.IllegalArgumentException: successHandler cannot be null
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE]
... 70 common frames omitted
Ý tưởng?