Filter
Filter
λ javax.servlet
ν¨ν€μ§μ ν¬ν¨λλ ν΄λμ€λ‘, DispatcherServlet
μ μμ²μ΄ μ λ¬λκΈ° μ / νμ url
ν¨ν΄μ λ§λ λͺ¨λ μμ²μ λν΄ λΆκ° μμ
μ μ²λ¦¬ν μ μλ κΈ°λ₯μ μ 곡νλ€.
μ¦, ApplicationContext
κ° μλ ν°μΊ£κ³Ό κ°μ Servlet Container μ μν΄ κ΄λ¦¬λκΈ°μ μ€νλ§μ λ²μ λ°μμ μ²λ¦¬λλ€.
Filter μ μλͺ μ£ΌκΈ°
package javax.servlet;
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() {}
}
init()
νν° κ°μ²΄λ₯Ό μ΄κΈ°ννκ³ μλΉμ€μ μΆκ°νκΈ° μν λ©μλλ€. μλΈλ¦Ώ 컨ν
μ΄λκ° μ΅μ΄λ‘ init()
λ©μλλ₯Ό νΈμΆνμ¬ νν° κ°μ²΄λ₯Ό μ΄κΈ°ννλ©΄ μ΄ν μμ²λ€μ doFilter()
λ₯Ό ν΅ν΄ μ²λ¦¬λλ€.
doFilter()
url-pattern
μ λ§λ λͺ¨λ HTTP μμ²μ΄ DispatcherServlet
μΌλ‘ μ λ¬λκΈ° μ μ Servlet Container μ μν΄ μ€νλλ λ©μλλ€.
FilterChain
μ ν΅ν΄ λ€μ λμμΌλ‘ μμ²μ μ λ¬νμ¬ μ / ν μ²λ¦¬λ₯Ό μ§νν μ μλ€.
destroy()
νν° κ°μ²΄λ₯Ό μ κ±°νκ³ μ¬μ©νλ μμμ λ°ννκΈ° μν λ©μλλ€. Servlet Container κ° μ΅μ΄λ‘ destroy()
λ©μλλ₯Ό νΈμΆνμ¬ νν° κ°μ²΄λ₯Ό μ’
λ£νλ©΄ μ΄νμλ doFilter()
μ μν΄ μ²λ¦¬λμ§ μλλ€.
Interceptor
Intercepter
λ Spring MVC ν¨ν€μ§μ ν¬ν¨λλ ν΄λμ€λ‘, Handler
λ₯Ό μ€ννκΈ° μ / ν κ·Έλ¦¬κ³ View
λ₯Ό λ λλ§ν ν λΆκ° μμ
μ μ²λ¦¬ν μ μλ κΈ°λ₯μ μ 곡νλ€. μ¦, ApplicationContext
λ΄μμ λμνλ€.
DispatcherServlet
μ΄ HandlerMapping
μ ν΅ν΄ Handler
λ₯Ό μ°ΎμΌλ©΄ HandlerExecutionChain
μ λ°ννλ€. μ΄λ 1κ° μ΄μμ Interceptor
κ° λ±λ‘λμ΄ μλ€λ©΄ μμ°¨μ μΌλ‘ Interceptor
λ₯Ό κ±°μ³ Handler
κ° μ€νλλ€.
Interceptor λ©μλ μ’ λ₯
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 {
}
preHandle()
Handler
κ° νΈμΆλκΈ° μ μ μ€νλλ©° Handler
μ΄μ μ μ²λ¦¬ν΄μΌ νλ μ μ²λ¦¬ μμ
μ΄λ μμ² μ 보λ₯Ό κ°κ³΅ λλ μΆκ°νλ κ²½μ°μ μ¬μ©λλ€.
postHandle()
Handler
κ° νΈμΆλ νμ μ€νλλ©° Handler
μ΄ν μ²λ¦¬ν΄μΌ νλ νμ²λ¦¬ μμ
μ΄ μμ λ μ¬μ©ν μ μλ€.
μ΅κ·Όμλ @RestController
κ° μ£Όλ‘ μ¬μ©λμ΄ μμ£Ό μ¬μ©λμ§ μλλ€.
afterCompletion()
λͺ¨λ View
μμ μ΅μ’
κ²°κ³Όλ₯Ό μμ±νλ μΌμ ν¬ν¨ν΄ λͺ¨λ μμ
μ΄ μλ£λ νμ μ€νλλ©° μμ² μ²λ¦¬ μ€μ μ¬μ©ν 리μμ€λ₯Ό λ°νν λ μ¬μ©ν μ μλ€.
Filter μ Interceptor μ μ°¨μ΄
Filter
λ 체μ΄λμ ν΅ν΄Request
μResponse
λ₯Ό μ‘°μν μ μμ§λ§,Interceptor
λ μ‘°μν μ μλ€.Filter
λDispatcherServlet
μΈλΆμ μ‘΄μ¬νκΈ° λλ¬ΈμErrorController
λ‘ μ²λ¦¬ν΄μ€μΌ νλ λ°λ©΄,Interceptor
λ@ControllerAdvice
λ₯Ό ν΅ν΄ μμΈλ₯Ό μ²λ¦¬ν μ μλ€.
Filter μ¬μ© μμ
- 보μ λ° μΈμ¦/μΈκ° κ΄λ ¨ μμ
- λͺ¨λ μμ²μ λν λ‘κΉ λλ κ²μ¬
- μ΄λ―Έμ§/λ°μ΄ν° μμΆ λ° λ¬Έμμ΄ μΈμ½λ©
- Spring κ³Ό λΆλ¦¬λμ΄μΌ νλ κΈ°λ₯
Interceptor μ¬μ© μμ
- μΈλΆμ μΈ λ³΄μ λ° μΈμ¦/μΈκ° κ³΅ν΅ μμ
- API νΈμΆμ λν λ‘κΉ λλ κ²μ¬
- Controller λ‘ λ겨주λ λ°μ΄ν° κ°κ³΅