๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Study/Java

[TIL] Filter vs Interceptor

by hong- 2022. 7. 25.

๐Ÿ’ก ํ•„ํ„ฐ์™€ ์ธํ„ฐ์…‰ํ„ฐ์˜ ์ฐจ์ด

  โ–ช๏ธ ํ•„ํ„ฐ Filter

 - ๋””์ŠคํŒจ์น˜ ์„œ๋ธ”๋ฆฟ์— ์š”์ฒญ์ด ์ „๋‹ฌ๋˜๊ธฐ ์ „/ํ›„์— url ํŒจํ„ด์— ๋งž๋Š” ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ๋ถ€๊ฐ€ ์ž‘์—… ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

 - ๋””์ŠคํŒจ์น˜ ์„œ๋ธ”๋ฆฟ? ์Šคํ”„๋ง์˜ ๊ฐ€์žฅ ์•ž๋‹จ์— ์กด์žฌํ•˜๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ

 - ์ฆ‰, ํ•„ํ„ฐ๋Š” ์Šคํ”„๋ง ๋ฒ”์œ„ ๋ฐ–์—์„œ ์ฒ˜๋ฆฌ ๋จ

  โ–ธ ํ•„ํ„ฐ์˜ ๋ฉ”์†Œ๋“œ

  : ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Filter ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋ฉฐ 3๊ฐ€์ง€ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง

public interface Filter {
    public void init(FilterConfig filterConfig) throws ServletException {}
    
    public void doFilter(ServletRequest request,
    					 ServletResponse response,
                         FilterChain chain) throws IOException, ServletException;
    public void destroy() {}
}

   โ‘  init( )

    -  ํ•„ํ„ฐ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์„œ๋น„์Šค์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ

   โ‘ก doFilter( )

    - url ํŒจํ„ด์— ๋งž๋Š” ๋ชจ๋“  HTTP ์š”์ฒญ์ด ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ์ „๋‹ฌ๋˜๊ธฐ ์ „ ์›น ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์‹คํ–‰๋˜๋Š” ๋ฉ”์†Œ๋“œ

   โ‘ข destory( )

    - ํ•„ํ„ฐ ๊ฐ์ฒด๋ฅผ ์„œ๋น„์Šค์—์„œ ์ œ๊ฑฐํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ์ž์›์„ ๋ฐ˜ํ™˜


  โ–ช๏ธ ์ธํ„ฐ์…‰ํ„ฐ Interceptor

  - Spring์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ ๋กœ์จ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „ ํ›„ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ

  - ์ฆ‰, ์›น ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋™์ž‘ํ•˜๋Š” ํ•„ํ„ฐ์™€ ๋‹ฌ๋ฆฌ ์ธํ„ฐ์…‰ํ„ฐ๋Š” ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ์—์„œ ๋™์ž‘

  - ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ ? ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์„ ํ†ตํ•ด ์ ์ ˆํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ๋„๋ก ์š”์ฒญ - ๊ทธ ๊ฒฐ๊ณผ๋กœ HandlerExecutionChain ๋Œ๋ ค์คŒ

     → 1๊ฐœ ์ด์ƒ์˜ ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค๋ฉด ์ˆœ์ฐจ์ ์œผ๋กœ ์ธํ„ฐ์…‰ํŠธ๋ฅผ ๊ฑฐ์ณ ์ปจํŠธ๋กค๋Ÿฌ ์‹คํ–‰

         ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ๋ฐ”๋กœ ์ปจํŠธ๋กค๋Ÿฌ ์‹คํ–‰

  โ–ธ ์ธํ„ฐ์…‰ํ„ฐ์˜ ๋ฉ”์†Œ๋“œ

  : ์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” HandlerInterceptor ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋ฉฐ 3๊ฐ€์ง€ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง

public interface HandlerInterceptor {
	boolean preHandle(HttpServletRequest request,
    				  HttpServletResponse response,
                      Object handler) throws Exception {
         return true;
    }
    
    void postHandle(HttpServletRequest request,
    				  HttpServletResponse response,
                      Object handler,
                      @Nullable ModelAndView modelAndView) throws Exception {
    }
    
    void afterCompletion(ttpServletRequest request,
    				  HttpServletResponse response,
                      Object handler),
                      @Nullable Exception ex) throws Exception {
    }
}

   โ‘  preHandle( )

    -  ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „ ์‹คํ–‰

    - ์ปจํŠธ๋กค๋Ÿฌ ์ด์ „์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ „์ฒ˜๋ฆฌ ์ž‘์—…์ด๋‚˜ ์š”์ฒญ ์ •๋ณด๋ฅผ ๊ฐ€๊ณตํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉ

   โ‘ก postHandle( )

    - ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ˜ธ์ถœ๋œ ํ›„ ์‹คํ–‰

    - ์ปจํŠธ๋กค๋Ÿฌ ์ดํ›„์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ํ›„์ฒ˜๋ฆฌ ์ž‘์—…์ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉ

   โ‘ข afterCompletion( )

    - ๋ชจ๋“  ๋ทฐ์—์„œ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ผ์„ ํฌํ•จํ•ด ๋ชจ๋“  ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„ ์‹คํ–‰

'Study > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL] Spring Security  (0) 2022.07.29
[TIL] Spring Security ์ธ๊ฐ€  (0) 2022.07.26
[TIL] Spring Security ์ธ์ฆ  (0) 2022.07.25
[TIL] Spring Security  (0) 2022.07.24
[TIL] API ๋ฌธ์„œํ™”  (0) 2022.07.21