π Spring
Filter VS Interceptor
κΈ°μ μ 곡μ
Filter
: J2EE νμ€ μ€νμ ꡬνν κΈ°μ μ΄λ€. ν°μΊ£κ³Ό κ°μ μΉ μ»¨ν μ΄λμ μν΄ κ΄λ¦¬λλ€.
Interceptor
: μ€νλ§μμ μ 곡νλ κΈ°μ μ΄λ€. λμ€ν¨μ² μλΈλ¦Ώμ΄ 컨νΈλ‘€λ¬λ₯Ό νΈμΆνκΈ° μ κ³Ό νμ μλ΅μ μ°Έμ‘°νκ±°λ κ°κ³΅νλ€.
κ΄λ¦¬λλ 컨ν μ΄λκ° κ°κ°Β μΉ μ»¨ν μ΄λμΒ μ€νλ§ μ»¨ν μ΄λμ΄λ€.
μ€ν μμ
Filter
doFilter()
: μμ²μ΄ λμ€ν¨μ² μλΈλ¦Ώμ μ λ¬λκΈ° μ μ μνλλ€.doFilter()
: μλ΅μ΄ λμ€ν¨μ² μλΈλ¦Ώμ κ±°μΉκ³ λ μ΄νμ μνλλ€.
Interceptor
preHandle()
: μμ²μ΄ λμ€ν¨μ² μλΈλ¦Ώμ μ λ¬λ μ΄νμ μνλλ€.postHandle()
: μλ΅μ΄ λμ€ν¨μ² μλΈλ¦Ώμ κ±°μΉκΈ° μ μ μνλλ€.
Request/Response μ‘°μ κ°λ₯ μ¬λΆ
νν°λΒ
Request
,Β Response
Β κ°μ²΄ μ체λ₯Ό μ‘°μν μ μλ€. λ°λ©΄μ μΈν°μ
ν°λ λΆκ°λ₯νλ€. μ΄λ₯Ό μ‘°μν μ μλ€λ κ²μ λ€λ₯Έ κ°μ²΄λ‘ λ³κ²½νμ¬ μ λ¬ν μ μλ€λ λ»μ΄λ€.public class CustomFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { // μ‘°μλ request, response λ‘ doFilter() μ νΈμΆμ΄ κ°λ₯νλ€. chain.doFilter(request, response); } }
public class MyInterceptor implements HandlerInterceptor { default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { // true, false λ§ λ°ν κ°λ₯νλ€. return true; } }
μ©λ
- μ¬μ€μ λΉμ·ν μ©λλ‘λ λ§μ΄ μ°λ κ² κ°λ€.
- ex. 보μ, μΈκ° μμ , λ‘κΉ , Audit
Filter
Β λ μ€νλ§κ³Ό λΆλ¦¬λμ΄μΌ νλ κΈ°λ₯μ μ μ© κ°λ₯νλ€.- ex. μ΄λ―Έμ§/λ°μ΄ν° μμΆ λ° λ¬Έμμ΄ μΈμ½λ©
Interceptor
Β λ μ€νλ§κ³Ό μ°κ΄μ΄ λ§μ μμ μ νκΈ° μ½λ€.- ex. λΉ νΈμΆμ λν λ‘κΉ , Audit
λΉ λ±λ‘ μ¬λΆ
μ¬μ€μ λ λ€ λΉμΌλ‘ λ±λ‘μ΄ κ°λ₯νλ€κ³ 보λ κ²μ΄ λ§λ€.
Interceptor
Β λ λΉμ°ν μ€νλ§μμ μ 곡νλ κΈ°μ μ΄κΈ°μ λΉ λ±λ‘μ΄ κ°λ₯νλ€.Filter
Β λ μλΈλ¦Ώμμ μ 곡νμ§λ§, μ€νλ§μμ μ 곡νλΒ DelegatingFilterProxy
Β λ‘ νλ‘μ νν° ννλ‘ λΉ λ±λ‘μ΄ κ°λ₯νλ€.μ€νλ§ λΆνΈμμλ λ΄μ₯ ν°μΊ£μ μ΄μ©ν΄ μλΈλ¦Ώ 컨ν μ΄λκΉμ§ μ€νλ§ λΆνΈκ° μ μ΄νκ² λλ―λ‘Β DelegatingFilterProxyΒ λ‘ κ°μΈμ λ±λ‘ν νμλ μλ€.