[SPRING] Spring 부트 애플리케이션에 서블릿 필터 추가하기
SPRINGSpring 부트 애플리케이션에 서블릿 필터 추가하기
나는 ETag suport를 가지고 싶습니다. 이 목적을 위해 모든 작업을 수행하는 ShallowEtagHeaderFilter가 있습니다. 어떻게해도 web.xml에 선언하지 않고 추가 할 수 있습니까? 실제로 존재하지 않습니다.
추신 나는 스프링 부트 1.1.4를 사용한다.
P.P.S. 여기에 완벽한 해결책이 있습니다.
package cuenation.api;
import org.springframework.boot.context.embedded.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.ShallowEtagHeaderFilter;
import javax.servlet.DispatcherType;
import java.util.EnumSet;
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean shallowEtagHeaderFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new ShallowEtagHeaderFilter());
registration.setDispatcherTypes(EnumSet.allOf(DispatcherType.class));
registration.addUrlPatterns("/cue-categories");
return registration;
}
}
해결법
-
==============================
1.참조 문서에서 언급했듯이 필요한 유일한 단계는 필터를 구성 클래스의 Bean으로 선언하는 것입니다.
참조 문서에서 언급했듯이 필요한 유일한 단계는 필터를 구성 클래스의 Bean으로 선언하는 것입니다.
@Configuration public class WebConfig { @Bean public Filter shallowEtagHeaderFilter() { return new ShallowEtagHeaderFilter(); } }
이미 WebApplicationInitializer를 확장하고있을 것입니다. 그렇지 않다면 webapp 설정을 web.xml 파일에서 WebApplicationInitializer 클래스로 변환해야합니다.
컨텍스트 구성이 XML 파일에있는 경우 AbstractDispatcherServletInitializer를 확장하는 클래스를 만들 수 있습니다. 구성 클래스를 사용하는 경우 AbstractAnnotationConfigDispatcherServletInitializer가 적절한 선택입니다.
어떤 경우 든 필터 등록을 추가 할 수 있습니다.
@Override protected Filter[] getServletFilters() { return new Filter[] { new ShallowEtagHeaderFilter(); }; }
코드 기반 서블릿 컨테이너 초기화의 전체 예제는 Spring 참조 문서에서 사용 가능하다.
-
==============================
2.조금 늦게 대답했다.
조금 늦게 대답했다.
내 솔루션은 맞춤 특수 효과를 만드는 것이 었습니다.
import org.springframework.core.annotation.AliasFor; import org.springframework.stereotype.Component; // ... @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Component public @interface Filter { @AliasFor(annotation = Component.class, attribute = "value") String value() default ""; }
그리고 그것을 필터 구현에 적용하기 만하면됩니다.
@Filter public class CustomFilter extends AbstractRequestLoggingFilter { @Override protected void beforeRequest(HttpServletRequest request, String message) { logger.debug("before req params:", request.getParameterMap()); } @Override protected void afterRequest(HttpServletRequest request, String message) { logger.debug("after req params:", request.getParameterMap()); } }
더보기 : @AliasFor, 봄 맞춤 주석 질문
from https://stackoverflow.com/questions/26151057/add-a-servlet-filter-in-a-spring-boot-application by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] JSF 2는 @ManagedProperty 및 xml이없는 Spring bean / service를 주입합니다. (0) | 2018.12.20 |
---|---|
[SPRING] Spring MVC의 컨텍스트 이해하기 (0) | 2018.12.20 |
[SPRING] Spring을 사용하여 HttpSessionListener에 의존성을 주입하는 방법은 무엇입니까? (0) | 2018.12.20 |
[SPRING] 컨텍스트 : 구성 요소 스캔 "이 바인딩되지 않았습니다. (0) | 2018.12.20 |
[SPRING] 새 키워드로 생성 된 Spring bean (@Component)의 자동 와이어 링 (0) | 2018.12.20 |