이전글
@WebFilter 어노테이션으로 필터 설정하기
서블릿 스펙 3.0 이전까지는 web.xml을 통해 Servlet과 Filter를 등록하고 URL 맵핑등을 설정하여 사용하였습니다. 그러나 서블릿 3.0 부터는 web.xml에서의 서블릿, 필터 설정을 자바 소스상에서 대체할 수 있는 어노테이션이 추가되었습니다.
@WebFilter 어노테이션은 필터를 등록하고 설정하는 어노테이션입니다. 서블릿 3.0은 톰캣을 기준으로 7 버전부터 지원하므로 톰캣7 이상의 서블릿컨테이너를 사용한다면 @WebFilter 어노테이션을 사용하여 필터를 등록할 수 있습니다.
다음은 이전글에서 사용했던 예제인 LoggingFilter 클래스입니다. 기존과 다른점은 web.xml에 설정해둔 <filter> 태그를 대신해 필터 클래스에 @WebFilter 어노테이션을 걸어 설정해 주었다는 것 뿐입니다. web.xml에는 아무런 추가 설정이 필요없고 단지 @WebFilter를 필터 클래스에 걸어두기만 하면 됩니다.
@WebFilter("*.jsp")
public class LoggingFilter implements Filter { |
cs |
@WebFilter 어노테이션의 설정들
@WebFilter 어노테이션은 web.xml의 <filter>태그나 <filter-mapping> 태그를 통해 사용하던 설정들을 모두 그대로 지원합니다. 설정들을 알아보도록 하겠습니다.
필터이름 지정 방법
web.xml에서 <filter> 태그에는 <filter-name> 이라는 태그를 지원하여 필터이름을 설정했습니다. @WebFilter은 filterName이라는 속성을 통해 설정할 수 있습니다. 다만 filterName속성은 필수값이 아닙니다.
@WebFilter(filterName ="loggingFilter")
public class LoggingFilter implements Filter { |
cs |
필터링 경로 설정 방법
web.xml에서는 <filter-mapping> 태그의 <url-pattern> 태그등을 통해서 필터링 대상 경로를 설정했었습니다. @WebFilter 어노테이션의 필터링 대상 설정 방법은 다음과 같이 몇 가지 방법이 있습니다.
1. 어노테이션에 맵핑 URL을 입력하는 방법
@WebFilter("/target") |
cs |
2. 어노테이션에 와일드카드를 사용하여 입력하는 방법
@WebFilter("/*") |
cs |
3. 어노테이션의 value 속성을 이용하는 방법
@WebFilter(value="/target") //또는
@WebFilter(value= {"/target", "/target2"}) //여러개 등록시에 |
cs |
4. 어노테이션의 urlPatterns 속성을 이용하는 방법
@WebFilter(urlPatterns="/target") //또는
@WebFilter(urlPatterns= {"/target", "/target2"}) //여러개 등록시에 |
cs |
5. 서블릿 등록시 사용한 서블릿 이름을 기준으로 지정하는 방법
@WebFilter(servletNames="boardController") //또는
@WebFilter(servletNames= {"boardController", "boardController2"}) //여러개 등록시에 |
cs |
@WebFilter 초기 파라미터 설정 방법
web.xml에서는 <filter> 태그의 <init-param> 태그를 통해 초기화 파라미터를 설정해 주었습니다. 만약 필터 초기화시에 설정할 파라미터를 지정하고 싶은 경우에는 initParams 속성에 @WebInitParam 어노테이션을 사용하여 속성명과 속성값을 지정해주면 됩니다.
@WebFilter(
value = {"/target", "/target2"},
initParams = @WebInitParam(name = "encoding", value = "UTF-8")
)
public class EncodingFilter implements Filter { |
cs |
만약 설정값을 여러개 주어야 한다면 배열 형태로 지정해 줄 수 있습니다.
@WebFilter(
initParams = {
@WebInitParam(name = "encoding", value = "UTF-8"),
@WebInitParam(name = "encoding2", value = "EUC-KR")
}
) |
cs |
@WebFilter 필터 순서 지정 방법
아쉽게도 @WebFilter 어노테이션은 필터들 사이의 순서를 지정할 수 있는 속성은 제공하지 않습니다. 따라서 두가지 정도 차선책이 있는데, 하나는 필터를 구현할 때 필터들의 기능을 서로의 순서에 의존하지 않도록 설계 하는것입니다. 즉 어떤 순서로 필터가 수행되어도 상관없이 필터 정책을 사용하는것이죠. 두번째로는 @WebFilter에서 필터이름을 설정해두고 <filter-mapping> 태그를 통해 web.xml에서 순서를 지정하는 방법입니다.
@WebFilter(filterName= "firstFilter")
public class FirstFilter implements Filter { |
cs |
@WebFilter(filterName= "secondFilter")
public class SecondFilter implements Filter { |
cs |
아래와 같이 web.xml을 설정해두면 서블릿컨테이너가 시작될 때 web.xml의 필터 맵핑 태그를 순서대로 읽어 필터체인의 순서를 판단할것입니다.
<filter-mapping>
<filter-name>firstFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>secondFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> |
cs |
디스패쳐 지정하기
필터의 디스패쳐 타입을 지정하고 싶은 경우에는 dispatcherTypes 속성을 사용합니다. 기본값은 DispatcherType.REQUEST 이며 배열로 여러개 지정할 수 있습니다.
@WebFilter(
dispatcherTypes= {
DispatcherType.REQUEST,
DispatcherType.INCLUDE
}
)
public class FirstFilter implements Filter { |
cs |
'Servlet&Jsp' 카테고리의 다른 글
[서블릿/JSP] web.xml에서 filter-mapping 설정의 dispatcher 설정에 대하여 (1) | 2019.01.16 |
---|---|
[서블릿/JSP] init() 메서드를 통한 필터 초기화시에 FilterConfig를 통해 설정값 얻기 (0) | 2019.01.13 |
[서블릿/JSP] 필터(Filter) 사용 방법 및 예제 (3) | 2019.01.09 |
[서블릿/JSP] 필터(Filter)란? 필터 개념 및 설명 (0) | 2019.01.08 |
[서블릿/JSP] 필터를 여러개 등록하는 방법 및 순서 지정하기 (0) | 2019.01.08 |