Tôi có bộ lọc Spring Security tùy chỉnh mở rộng GenericFilterBean.Ý nghĩa của việc thêm @Component vào bộ lọc Spring Security tùy chỉnh
Để làm phụ thuộc tự động và tạo bean, tôi đã thêm chú thích @Component.
Trong cấu hình an ninh của tôi, tôi cũng đăng ký bộ lọc như:
@Autowired
private RestAuthenticationFilter restAuthenticationFilter;
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.addFilterBefore(restAuthenticationFilter, LogoutFilter.class)
Tất cả mọi thứ hoạt động tốt, ngoại trừ bộ lọc của tôi được gọi là hai lần ... Dường như mùa xuân thêm bộ lọc cũng tự động đến các bộ lọc tiêu chuẩn.
Phương pháp tiếp cận tốt nhất ở đây là gì?
CẬP NHẬT
@ Dave này là những gì bạn nghĩa là gì? Dường như nó hoạt động.
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application extends WebMvcConfigurerAdapter {
@Autowired
private RestAuthenticationFilter restAuthenticationFilter;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public ApplicationSecurity applicationSecurity() {
return new ApplicationSecurity();
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setEnabled(false);
filterRegistrationBean.setFilter(restAuthenticationFilter);
return filterRegistrationBean;
}
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
protected static class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Autowired
private RestAuthenticationFilter restAuthenticationFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.addFilterBefore(restAuthenticationFilter, LogoutFilter.class)
.authorizeRequests()
.anyRequest().authenticated()
.and()
.csrf()
.disable()
.exceptionHandling()
.authenticationEntryPoint(new Http403ForbiddenEntryPoint())
.and()
.requestCache()
.requestCache(new NullRequestCache())
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
// @formatter:on
}
}
}
Vâng, đó là ý của tôi. –
Cảm ơn bạn đã xác nhận. Nó bằng cách nào đó cảm thấy khó chịu để vô hiệu hóa một cách rõ ràng bộ lọc bằng cách tuyên bố một FilterRegistrationBean @bean. –
Tôi nghĩ lý tưởng là ý định của Bộ lọc có thể được suy ra từ chú thích đánh dấu ('@ SecurityFilter'?) Cùng với' @ Component' - tức là - sử dụng tôi trong chuỗi Security so với sử dụng tôi trong chuỗi bộ lọc tiêu chuẩn . Tôi đã gặp phải vấn đề tương tự, vì bộ lọc của tôi không cần bất kỳ tài nguyên Bean nào mà tôi không đăng ký nó như một '@ Bean', chỉ là một Bộ lọc bảo mật theo lập trình. – hoserdude