У меня есть приложение Spring-Boot, которое использует Spring-Security. У меня есть обработанная область запроса, которую я хочу передать в один из моих настраиваемых фильтров в цепочке фильтров безопасности, но на данный момент она не работает.
Я понимаю, что некоторые конфигурации необходимы для использования бранд-зонда, зависящего от объекта, за пределами DispatcherServlet, и прочитали это http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/beans.html # beans-factory-scopes-other Но пока не удалось добиться успеха:
Для сервлета 3. 0+ это можно сделать программно через интерфейс WebApplicationInitializer.
(Я использую последний Tomcat, так что это сервлет 3+)
Я пробовал использовать как RequestContextListener, так и RequestContextFilter (docs говорят, что они и DispatcherServlet делают то же самое), но в обоих случаях я все еще получаю ошибки, потому что мой объект с автосоединением имеет значение null:
Моя попытка зарегистрировать фильтр
@Configuration
@ComponentScan
@EnableAutoConfiguration
class Application extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
application.sources( Application )
}
@Override public void onStartup( ServletContext servletContext ) throws ServletException {
super.onStartup( servletContext )
servletContext.addFilter("requestContextFilter", new RequestContextFilter() ).addMappingForUrlPatterns(null, false, "/*")
}
Моя попытка зарегистрировать слушателя
@Configuration
@ComponentScan
@EnableAutoConfiguration
class Application extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
application.sources( Application )
}
@Override public void onStartup( ServletContext servletContext ) throws ServletException {
super.onStartup( servletContext )
servletContext.addListener( new RequestContextListener() )
}
Мне что-то не хватает? Я просмотрел исходный код автоматической конфигурации для Spring Boot и ничего не нашел.
ОБНОВИТЬ
Я был идиотом, я добавил свой фильтр в моей конфигурации SpringSecurity внутри метода configure()
:
http.addFilterBefore( new PreAuthFilter(), BasicAuthenticationFilter )
но не зарегистрировал новый фильтр в качестве компонента. Как и в случае с сообщением M. Denium ниже, мне не понадобилась вся эта дополнительная конфигурация, явно добавляющая слушатель/фильтр, достаточно было зарегистрировать компонент.