@WebFilter(filterName = "loggingFilter")
public class LoggingFilter implements Filter{}
1) Annotation 맵핑 URL을 입력하는 방법
@WebFilter("/target")
2) Annotation 와일드카드 사용하는 방법
@WebFilter("/*")
3) Annotation value 속성 이용 방법
@WebFilter(value="/target") // 한개
@WebFilter(value="/target", "/target2"}) // 여러개 동시에
4) Annotation urlPatterns 속성
@WebFilter(urlPatterns="/target") // 한개
@WebFilter(urlPatterns={"/target", "/target2"}) // 여러개 동시에
5) 서블릿 등록시 사용한 서블릿 이름을 기준으로 지정하는 방법
@WebFilter(servletNames="boardController")
@WebFilter(servletNames={"boardController", "boardController2"}) // 여러개 등록
@WebFilter(
value = {"/target", "/target2"},
initParams=@WebInitParam(name="encoding", value="UTF-8")
)
public class EncodingFilter implements Filter{}
만약 설정값을 여러개 주어야 한다면 배열 형태로 지정해 줄 수 있습니다.
@WebFilter(
initParams={
@WebInitParam(name="encoding", value="UTF-8"),
@WebInitParam(name="encoding2", value="EUC-KR")
}
)
@WebFilter(
dispatcherTypes={
DispatcherType.REQUEST,
DispatcherType.INCLUDE
}
)
public class FirstFilter implements Filter{}
@Slf4j
public class MyFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException{
log.info("init MyFilter");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException{
log.info("doFilter MyFilter, uri : {}", ((HttpServletRequest)servletRequest).getRequestURI());
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destory(){
log.info("destroy MyFilter");
}
}
@SpringBootApplication
public class Method1Applicatoin{
public static void main(String[] args){
SpringApplication.run(Method1Application.class, args);
}
@Bean
public FilterRegistrationBean setFilterRegistration(){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MyFilter();
filterRegistrationBean.addUrlPatterns("/filtered/*");
return filterRegistrationBean;
}
}
@Slf4j
@WebFilter(urlPatterns="/filtered/*")
public class MyFilter implements Filter{
}
@WebFilter에 @Componet를 붙이면 @WebFilter가 실질적으로 호출되는 영역에서는 2번 호출되지 않는 영역에서는 1번 호출됨
이유는 스프링 부트에는 @SpringBootApplication이 있고 그 안에는 @ComponentScan이 있어서 빈들을 자동으로 등록해주는 역할을 하게 되는데 필터에 @Component가 설정되어 있어 자동으로 등록이 되었고 @WebFilter + @ServletComponentScan 조합으로 한번 더 등록되어 총 2번 등록된 상황이 발생했기 때문이다
// Main 클래스에 @ServletComponentScan 또는 Filter에 @Component로 등록해줘야 @WebFilter가 정상 작동함.