[servlets] WAR에서 주석을 사용하여 서블릿 필터 실행 순서를 정의하는 방법

WAR에 webapp 특정 서블릿 필터를 정의 web.xml하면 필터 실행 순서는에서 정의 된 순서와 동일합니다 web.xml.

그러나 @WebFilter주석을 사용하여 해당 필터를 정의하면 필터 실행 순서는 무엇이며 어떻게 실행 순서를 결정할 수 있습니까?



답변

실제로 @WebFilter주석을 사용하여 필터 실행 순서를 정의 할 수 없습니다 . 그러나 web.xml사용 을 최소화하려면 정의 filterName가 필요하지 않고 원하는 순서 <filter><filter-mapping>정의 만 필요하도록 모든 필터에 주석을 달면 충분합니다 .

예를 들어

@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}

@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}

에서와 web.xml그냥이 :

<filter-mapping>
    <filter-name>filter1</filter-name>
    <url-pattern>/url1/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>filter2</filter-name>
    <url-pattern>/url2/*</url-pattern>
</filter-mapping>

에 URL 패턴을 유지하려면 @WebFilter다음과 같이하십시오.

@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}

@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}

그러나 비어있을 수 있지만 XSD에 따라 필요하기 때문에 여전히 <url-pattern>in을 유지해야합니다 web.xml.

<filter-mapping>
    <filter-name>filter1</filter-name>
    <url-pattern />
</filter-mapping>
<filter-mapping>
    <filter-name>filter2</filter-name>
    <url-pattern />
</filter-mapping>

그것의 존재에 질식 때문에 접근 방법에 관계없이,이 모든 버전 7.0.28까지 톰캣에 실패 할 것 <filter-mapping>없이 <filter>. 참조 , @WebFilter가하는 <필터 매핑>하지 작업 내부의 web.xml Tomcat을 사용하여


답변

서블릿 3.0 스펙은 컨테이너가 어노테이션을 통해 선언 된 필터를 주문하는 방법에 대한 힌트를 제공하지 않는 것 같습니다. 그러나 web.xml 파일에서 선언을 통해 필터를 주문하는 방법은 분명합니다.

안전한. 상호 종속성이있는 web.xml 파일 순서 필터를 사용하십시오. web.xml 파일 사용 필요성을 최소화하기 위해 필터를 모두 독립적으로 주문하십시오.


답변