Запрет Spring Boot от регистрации одного из фильтров Spring Security
Я хотел бы отключить один из фильтров Spring Security в цепочке безопасности.
Я уже виделаЗапрет Spring Boot от регистрации фильтра сервлетов Вопрос - и принято, должно работать, но, к сожалению, нет.
С кодом:
@Bean
public FilterRegistrationBean registration(AnonymousAuthenticationFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean(filter);
registration.setEnabled(false);
return registration;
}
Spring Boot незамедлительно объявит об отсутствии подходящего компонента, что печально:
Вызвано: org.springframework.beans.factory.NoSuchBeanDefinitionException: не найден квалифицирующий компонент типа [org.springframework.security.web.authentication.AnonymousAuthenticationFilter] для зависимости: ожидается, что по крайней мере 1 компонент, который квалифицируется как кандидат для автоматической передачи для этой зависимости. Аннотации зависимостей: {}
После создания другого компонента:
@SuppressWarnings("deprecation") // Oh, there be dragons
@Bean
public AnonymousAuthenticationFilter anonymousAuthenticationFilter() {
return new AnonymousAuthenticationFilter();
}
На меня напали
Вызвано: java.lang.IllegalArgumentException: [утверждение не выполнено] - этот аргумент String должен иметь длину; он не должен быть нулевым или пустым
Который полностью нестабилен;Assert
вafterPropertiesSet()
методhttps://github.com/spring-projects/spring-security/blob/master/web/src/main/java/org/springframework/security/web/authentication/AnonymousAuthenticationFilter.java мешают мне использовать конструктор по умолчанию. Используя другой подход:
@Bean
public AnonymousAuthenticationFilter anonymousAuthenticationFilter() {
// it will be disabled anyway so...
return new AnonymousAuthenticationFilter("_", new Object(), new ArrayList<GrantedAuthority>());
}
Все намного лучше
ИНФОРМАЦИЯ 4916 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean: Фильтр anonymousAuthenticationFilter не зарегистрирован (отключен)
DEBUG 4916 --- [ost-startStop-1] o.s.security.web.FilterChainProxy: Инициализирующий фильтр 'springSecurityFilterChain'
DEBUG 4916 --- [ost-startStop-1] o.s.security.web.FilterChainProxy: Фильтр 'springSecurityFilterChain' успешно настроен
Но после доступа к некоторому ресурсу я получил:
DEBUG 4916 --- [nio-8080-exec-3] o.s.security.web.FilterChainProxy: / пользователь в позиции 10 из 13 в цепочке дополнительных фильтров; фильтр срабатывания: 'AnonymousAuthenticationFilter'
DEBUG 4916 --- [nio-8080-exec-3] o.s.s.w.a.AnonymousAuthenticationFilter: заполнен SecurityContextHolder анонимным токеном: 'org.springframework.security.authentication.AnonymousAuthenticationToken@90572420: руководитель: anonymousUser; Полномочия: [ЗАЩИЩЕНО]; Аутентифицировано: правда; Подробности: org.springframework.security.web.authentication.WebAuthenticationDetails@255f8: RemoteIpAddress: 127.0.0.1; SessionId: 6B9D974A4634548750FE78C18F62A6B0; Предоставленные полномочия: ROLE_ANONYMOUS '
По какой-то причине AnonymousAuthenticationFilter все еще работает. Вопрос: есть ли способ отключить такие фильтры в приложении Spring Boot?