2016-09-12 3 views
1

я определил мой AlanCookieFilter по @Bean аннотацию:фильтра определение шаблона не применяется

@Bean 
    public Filter alanCookieFilter() { 
     return new AlanCookieFilter(); // type of AbstractPreAuthenticatedProcessingFilter 
    } 

Затем я добавил свой фильтр с помощью WebSecurityConfigurerAdapter:

@Configuration 
public class AlanOAuthWebConfig extends WebSecurityConfigurerAdapter { 


    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.addFilter(alanCookieFilter()).antMatcher("/**"); 
    } 
} 

Но когда я начал приложение, я получил следующий лог-сообщение:

o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'alanCookieFilter' to: [/*] 

Кажется, что AlanCookieFilter по-прежнему отображается на /* вместо /**. Я полностью смущен этим поведением.

ответ

2

Вы добавили фильтр дважды. Первый раз в качестве сервлета Filter и второй раз в filter chain весенней безопасности.

По умолчанию Spring загрузки отображает ваш фильтр /* см Spring Boot Docs:

По умолчанию, если контекст содержит только один сервлет будет сопоставлен /. В случае нескольких сервлетов Servlets имя bean-компонента будет использоваться в качестве префикса пути. Фильтры будут отображаться на /*.

Если сопоставление, основанное на соглашениях, недостаточно гибко, вы можете использовать классы ServletRegistrationBean и FilterRegistrationBean для полного контроля. Вы также можете зарегистрировать элементы напрямую, если ваш bean реализует интерфейс ServletContextInitializer.

Чтобы изменить отображение, смотрите также: How to add a filter class in Spring Boot?

Вы должны только добавить фильтры Spring Security (или расширений) в цепочке фильтров см HttpSecurity.html#addFilter:

Добавляет фильтр, который должен быть экземпляр или расширение одного из фильтров, предоставляемых в рамках безопасности.

Ваш фильтр расширяет AbstractPreAuthenticatedProcessingFilter и должен быть добавлен только к цепи фильтра.

Один из способов остановить Spring Boot для отображения вашего фильтра: не подвергайте фильтр @Bean, см. Spring Boot Docs.

При использовании встроенного контейнера сервлетов вы можете зарегистрировать сервлеты и фильтры непосредственно в качестве пружинных компонентов.

Смежные вопросы