<!-- 한글 처리를 위한 인코딩 필터 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
// javax.servlet.Filter
public interface Filter {
public default void init(FilterConfig filterConfig) throws ServletException {}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException;
public default void destroy() {}
}
// org.springframework.web.servlet.HandlerInterceptor
public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable ModelAndView modelAndView) throws Exception {
}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable Exception ex) throws Exception {
}
}
Filter | Interceptor | |
---|---|---|
관리 컨테이너 | 웹 컨테이너 | 스프링 컨테이너 |
Request/Response 파라미터 교체 가능 여부 | 가능 | 불가능 |
용도 | 1. 공통 보안 및 인증/인가 관련 작업 2. 모든 요청에 대한 로깅 또는 감사 3. 이미지/데이터 압축 및 문자열 인코딩 4. Spring과 분리되어야 하는 기능 | 1. 세부적인 보안 및 인증/인가 공통 작업 2. API 호출에 대한 로깅 또는 감사 3. Controller로 넘겨주는 정보의 가공 |
@Before
: 대상 메서드 수행 전@After
: 대상 메서드 수행 후@After-returning
: 대상 메서드의 정상적인 수행 후@After-throwing
: 예외발생 후@Around
: 대상 메서드의 수행 전/후컨트롤러 호출 과정에 적용되는 부가기능을 advice(aop)로 적용하기보다 인터셉터를 사용하는 편이 낫다.