2016-08-02 5 views
-1
  • Возможно ли зарегистрировать новый фильтр сервлета, используя Spring ApplicationContextInitializer?
  • Или есть способ получить доступ к ServletContext, задав пользовательский класс в spring.factories?

Идея заключается в создании небольшой библиотеки, которая автоматически регистрирует фильтр сервлета, если библиотека добавлена ​​в проект.Как добавить фильтр сервлета с использованием spring.factories

Возможно, у кого-то есть идея, как сделать это прозрачно от пользователей, поддерживая Spring Boot и самую важную обычную Spring (для устаревших приложений)?

ответ

1

Вы можете сделать это очень просто, вам нужно сделать несколько вещей:

1) Создать соответствующий Maven/Gradle конфигурации для модуля JAR с соответствующими зависимостями.

2) Создайте класс конфигурации с конфигурацией фильтра. Например:

package com.test; 

@Configuration 
public class FilterConfig { 
    @Bean 
    public FilterRegistrationBean contextFilterRegistrationBean() { 
     FilterRegistrationBean registrationBean = new FilterRegistrationBean(); 
     RequestContextFilter contextFilter = new RequestContextFilter(); 
     registrationBean.setFilter(contextFilter); 
     registrationBean.setOrder(1); 
     return registrationBean; 
    } 
} 

3) создать файл SRC/основные/ресурсы/META-INF/spring.factories и добавить:

4) Опубликование/установить вашу банку и включить его в зависимости от ваше приложение Spring Boot.

После этого FilterConfig должен автоматически загружаться в каждом приложении Spring Boot, где вы добавляете зависимость, в которой используется @EnableAutoConfiguration (I.E., используя аннотацию @SpringBootApplication).

+0

Спасибо за решение и усилие. К сожалению, я знаю это решение для Spring Boot. Я надеялся, что можно добиться того же результата для приложений, не связанных с Spring Boot. Потому что мне нужно поддерживать некоторое приложение Spring Spring. –

+0

без каких-либо изменений в приложениях, не поддерживающих Spring Boot? – Ulises

+0

Надеюсь, да. Вот почему я просматриваю spring.factories и ApplicationContextInitializer. Но с этого момента у меня нет доступа к ServletContext. Хорошо, что у нас нет слишком много устаревшего приложения, большинство из них - Spring Boot, и я могу использовать ваш подход. –

0

создать Servlet боб в Configuration классе следующим образом:

@Bean 
public ServletRegistrationBean envServlet() { 
    EnvServlet envServlet = new EnvServlet(); 
    ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(envServlet, "/boot/env"); 
    servletRegistrationBean.setName("bootEnvServlet"); 
    return servletRegistrationBean; 
} 

весна зарегистрирует подкласс org.springframework.boot.context.embedded.RegistrationBean «s в контейнер сервлетов.