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.