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


167

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

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

답변:


187

실제로 @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을 사용하여


5
order중첩 된 @WebFilterMapping주석 의 속성을 도입 할 수있었습니다 . 나는 그것을 단순하게하지 않았는지 궁금하다
— Bozho

12
@ Bozho : 그것은 구체적이지 않을 것입니다. 웹앱에 필터가 포함 된 타사 라이브러리가 제공되는 경우 어떻게됩니까? 미리 주문을하기가 어렵습니다.
— BalusC

1
@BalusC : 귀하의 예에서 뭔가 잘못되었습니다 : url-pattern은 필터 이름으로 닫힙니다.
— AndrewBourgeois

3
@AndrewBourgeois : 수정되었습니다. 복사 붙여 넣기 오류였습니다. Markdown 편집기에 Eclipse와 같은 내장 XML 유효성 검사가없는 것이 너무 나쁩니다.)
— BalusC

6
<url-pattern />JBoss EAP 6.1에서는 사용 이 작동하지 않습니다. @WebFilter값을 무시 하고 필터가 전혀 실행 되지 않습니다 .
— seanf

12

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

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


4
내 프로젝트에는 많은 서블릿 필터가 있습니다. 그중에서 특정 필터 만 먼저 호출해야하며 다른 필터의 순서는 중요하지 않습니다. web.xml의 모든 필터를 더빙해야합니까? 아니면 지름길이 있습니까?
— siva636
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.