[Spring] Filter 와 Intercepter

nayu1105Β·2023λ…„ 5μ›” 25일
0

Spring

λͺ©λ‘ 보기
1/3

Filter

πŸ’‘ λ””μŠ€νŒ¨μ²˜ μ„œλΈ”λ¦Ώ(Dispatcher Servlet)에 μš”μ²­μ΄ μ „λ‹¬λ˜κΈ° μ „/후에 url νŒ¨ν„΄μ— λ§žλŠ” λͺ¨λ“  μš”μ²­μ— λŒ€ν•΄ λΆ€κ°€μž‘μ—…μ„ μ²˜λ¦¬ν•  수 μžˆλŠ” κΈ°λŠ₯을 제곡

  • λ””μŠ€νŒ¨μ²˜ μ„œλΈ”λ¦Ώμ€ μŠ€ν”„λ§μ˜ κ°€μž₯ μ•žλ‹¨μ— μ‘΄μž¬ν•˜λŠ” ν”„λ‘ νŠΈ μ»¨νŠΈλ‘€λŸ¬μ΄λ―€λ‘œ, ν•„ν„°λŠ” μŠ€ν”„λ§ λ²”μœ„ λ°–μ—μ„œ μ²˜λ¦¬κ°€ λœλ‹€.
  • 즉, μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆκ°€ μ•„λ‹Œ ν†°μΊ£κ³Ό 같은 μ›Ή μ»¨ν…Œμ΄λ„ˆ(μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆ)에 μ˜ν•΄ 관리가 λ˜λŠ” 것이고(μŠ€ν”„λ§ 빈으둜 등둝은 λœλ‹€), λ””μŠ€νŒ¨μ²˜ μ„œλΈ”λ¦Ώ μ „/후에 μ²˜λ¦¬ν•˜λŠ” 것
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 λ©”μ†Œλ“œ
    • μ»¨νŠΈλ‘€λŸ¬κ°€ 호좜되기 전에 μ‹€ν–‰
    • 컨트둀러 이전에 μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” μ „μ²˜λ¦¬ μž‘μ—…μ΄λ‚˜ μš”μ²­ 정보λ₯Ό κ°€κ³΅ν•˜κ±°λ‚˜ μΆ”κ°€ν•˜λŠ” κ²½μš°μ— μ‚¬μš©
  • postHandle λ©”μ†Œλ“œ
    • 컨트둀러λ₯Ό 호좜된 후에 μ‹€ν–‰
    • 컨트둀러 이후에 μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” ν›„μ²˜λ¦¬ μž‘μ—…μ΄ μžˆμ„ λ•Œ μ‚¬μš©
  • afterCompletion λ©”μ†Œλ“œ
    • λͺ¨λ“  λ·°μ—μ„œ μ΅œμ’… κ²°κ³Όλ₯Ό μƒμ„±ν•˜λŠ” 일을 포함해 λͺ¨λ“  μž‘μ—…μ΄ μ™„λ£Œλœ 후에 μ‹€ν–‰
    • μš”μ²­ 처리 쀑에 μ‚¬μš©ν•œ λ¦¬μ†ŒμŠ€λ₯Ό λ°˜ν™˜ν•  λ•Œ μ‚¬μš©ν•˜κΈ°μ— 적합

Intercepter

πŸ’‘ Spring이 μ œκ³΅ν•˜λŠ” 기술둜써, λ””μŠ€νŒ¨μ²˜ μ„œλΈ”λ¦Ώ(Dispatcher Servlet)이 컨트둀러λ₯Ό ν˜ΈμΆœν•˜κΈ° μ „κ³Ό 후에 μš”μ²­κ³Ό 응닡을 μ°Έμ‘°ν•˜κ±°λ‚˜ 가곡할 수 μžˆλŠ” κΈ°λŠ₯을 제곡

  • 즉, μ›Ή μ»¨ν…Œμ΄λ„ˆ(μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆ)μ—μ„œ λ™μž‘ν•˜λŠ” 필터와 달리 μΈν„°μ…‰ν„°λŠ” μŠ€ν”„λ§ μ»¨ν…μŠ€νŠΈμ—μ„œ λ™μž‘μ„ ν•˜λŠ” 것
  • λ””μŠ€νŒ¨μ²˜ μ„œλΈ”λ¦Ώμ€ ν•Έλ“€λŸ¬ 맀핑을 톡해 μ μ ˆν•œ 컨트둀러λ₯Ό 찾도둝 μš”μ²­ν•˜λŠ”λ°, κ·Έ 결과둜 μ‹€ν–‰ 체인(HandlerExecutionChain)을 λŒλ €μ€€λ‹€. κ·Έλž˜μ„œ 이 μ‹€ν–‰ 체인은 1개 μ΄μƒμ˜ 인터셉터가 λ“±λ‘λ˜μ–΄ μžˆλ‹€λ©΄ 순차적으둜 인터셉터듀을 거쳐 μ»¨νŠΈλ‘€λŸ¬κ°€ μ‹€ν–‰λ˜λ„λ‘ ν•˜κ³ , 인터셉터가 μ—†λ‹€λ©΄ λ°”λ‘œ 컨트둀러λ₯Ό μ‹€ν–‰ν•œλ‹€.

Filter 와 Intercepter 의 차이

λŒ€μƒν•„ν„°(Filter)인터셉터(Intercepter)
κ΄€λ¦¬λ˜λŠ” μ»¨ν…Œμ΄λ„ˆμ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆμŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ
μŠ€ν”„λ§μ˜ μ˜ˆμ™Έμ²˜λ¦¬ μ—¬λΆ€XO
Request/Response 객체 μ‘°μž‘ κ°€λŠ₯ μ—¬λΆ€OX
μš©λ„1. κ³΅ν†΅λœ λ³΄μ•ˆ 및 인증/인가
2. λͺ¨λ“  μš”μ²­μ— λŒ€ν•œ λ‘œκΉ… λ˜λŠ” 감사
3. 이미지/데이터 μ••μΆ• 및 λ¬Έμžμ—΄ 인코딩
4. Springκ³Ό λΆ„λ¦¬λ˜μ–΄μ•Ό ν•˜λŠ” κΈ°λŠ₯
1. 세뢀적인 λ³΄μ•ˆ 및 인증/인가 곡톡 μž‘μ—…
2. API ν˜ΈμΆœμ— λŒ€ν•œ λ‘œκΉ… λ˜λŠ” 감사
3. Controller둜 λ„˜κ²¨μ£ΌλŠ” 정보(데이터)의 가곡

μ°Έκ³ ν•œ μ‚¬μ΄νŠΈ

[SpringBoot] Spring Securityλž€?
[Spring] ν•„ν„°(Filter) vs 인터셉터(Interceptor) 차이 및 μš©λ„ - (1)

0개의 λŒ“κΈ€