2016-11-18 2 views
1

Я представляю Spring Web Security на уже существующем веб-сайте. Теперь возникла проблема:Выполнять фильтры сервлетов перед цепочкой фильтров Spring Security

Я хочу, чтобы мои настраиваемые фильтры выполнялись в цепочке фильтра Tomcat до цепи фильтра Spring Security. Я не хочу, чтобы они были частью этой цепочки фильтров Spring Security.

Все, что я нашел, это решение в Spring Boot (см. "Spring - How to insert a filter before SpringSecurityFilterChain") - но я не использую Spring Boot.


Update 22.11.2016:

Вот часть моего web.xml - только добавляют здесь пользовательский фильтр:

<filter-mapping> 
    <filter-name>MyFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 
фильтр

Весна безопасности цепи добавляется путем определения AbstractSecurityWebApplicationInitializer:

public class MySecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { 
    ... 
} 


Результат: фильтры безопасности Spring идут первым, и только после этого мой пользовательский фильтр.

Как это сделать?

ответ

1

Если вы определяете фильтр Web Security в своем web.xml перед объявлением SpringSecurity Filter, этот фильтр не будет частью цепочки фильтров весенней безопасности, и ваш фильтр будет выполняться перед цепочкой фильтров весенней безопасности.

Или если вы хотите, чтобы фильтр выполнялся на уровне веб-сервера, вы можете определить фильтр в tomcat web.xml, который доступен в conf/directory.This фильтр будет выполняться до вашей цепи фильтра приложений. Но этот фильтр будет выполняться для всех веб-приложений во время выполнения вашего tomcat.

Обратите внимание, что вам также необходимо сделать класс фильтра доступным для всех веб-приложений, возможно, поместив его в каталог lib/Tomcat).

+1

Да, но мой фильтр Spring Security цепь не добавляется в ' web.xml '- я использую «WebSecurityConfigurerAdapter» с аннотацией @EnableWebSecurity. В «web.xml» объявлен только пользовательский фильтр. (см. обновленный вопрос). Как сделать свой собственный фильтр в этом сценарии первым фильтром? – olivmir

+0

Он работает так, как вы его описываете! Теперь я определил и сопоставил SpringSecurityFilterChain с помощью 'web.xml' (а не как раньше с помощью' AbstractSecurityWebApplicationInitializer') и поместил свой собственный фильтр перед этим 'filter-mapping'. После этого я поставил точку останова в одном из фильтров цепочки Spring Security и теперь вижу в отладчике, что мой настраиваемый фильтр выполняется до Spring Security. Спасибо. – olivmir

0

Spring безопасности обеспечивают несколько функций, чтобы добавить свой фильтр до или после того, как:

@Configuration 
public class CustomWebSecurityConfigurerAdapter 
    extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.addFilterAfter(
      new CustomFilter(), BasicAuthenticationFilter.class); 
    } 
} 

вы можете обратиться к этой странице: http://www.baeldung.com/spring-security-custom-filter

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