๐Ÿ”— Interceptor (HandlerInterceptor)

๐Ÿ” ๊ฐœ์š”

  • Spring MVC์—์„œ ์ปจํŠธ๋กค๋Ÿฌ ์‹คํ–‰ ์ „/ํ›„ ๋ฐ ์š”์ฒญ ์™„๋ฃŒ ํ›„ ์ถ”๊ฐ€ ๋กœ์ง์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ
  • Servlet Filter์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์‹คํ–‰ ์‹œ์ ๊ณผ ํ™œ์šฉ ๋ฒ”์œ„๊ฐ€ ๋‹ค๋ฆ„
  • ์ธ์ฆ, ๋กœ๊น…, ์„ฑ๋Šฅ ์ธก์ •, ๊ณตํ†ต ์ „์ฒ˜๋ฆฌ/ํ›„์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ

โ˜๐Ÿป ํ•œ์ค„ ์š”์•ฝ

์ปจํŠธ๋กค๋Ÿฌ ์‹คํ–‰ ์ „ยทํ›„, ์‘๋‹ต ์ง์ „์— ์›ํ•˜๋Š” ๋กœ์ง์„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” Spring MVC์˜ ํ™•์žฅ ์ง€์ 


๐Ÿค” ์™œ ํ•„์š”ํ•œ๊ฐ€?

  • ์ธ์ฆยท์ธ๊ฐ€ ๋กœ์ง ๊ณตํ†ตํ™”
  • ๋กœ๊น…, ํŠธ๋žœ์žญ์…˜, ์„ฑ๋Šฅ ์ธก์ • ๋“ฑ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ ์ฒ˜๋ฆฌ
  • ํŠน์ • URL ํŒจํ„ด์— ๋Œ€ํ•œ ์ „์—ญ ์ฒ˜๋ฆฌ ์ ์šฉ
  • ๋น„์ฆˆ๋‹ˆ์Šค ์ฝ”๋“œ์™€ ๊ธฐ์ˆ ์  ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌ

โš™๏ธ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

1. ์ธํ„ฐํŽ˜์ด์Šค

org.springframework.web.servlet.HandlerInterceptor

Method์‹คํ–‰ ์‹œ์ ์„ค๋ช…
preHandle์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ „์š”์ฒญ ๊ฐ€๋กœ์ฑ„๊ธฐ, ์ธ์ฆยท๊ฒ€์ฆ ์ˆ˜ํ–‰. false ๋ฐ˜ํ™˜ ์‹œ ์š”์ฒญ ์ค‘๋‹จ
postHandle์ปจํŠธ๋กค๋Ÿฌ ์‹คํ–‰ ํ›„, View ๋ Œ๋”๋ง ์ „๋ชจ๋ธ ๋ฐ์ดํ„ฐ ๊ฐ€๊ณต ๋“ฑ
afterCompletionView ๋ Œ๋”๋ง ์™„๋ฃŒ ํ›„๋ฆฌ์†Œ์Šค ์ •๋ฆฌ, ์˜ˆ์™ธ ๋กœ๊น…

๐Ÿ”ง ๋“ฑ๋ก ๋ฐฉ๋ฒ•

(A) Java Config ๋ฐฉ์‹

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new AuthInterceptor())
                .addPathPatterns("/secure/**")  // ์ ์šฉ ๊ฒฝ๋กœ
                .excludePathPatterns("/public/**"); // ์ œ์™ธ ๊ฒฝ๋กœ
    }
}

(B) ๊ตฌํ˜„ ์˜ˆ์‹œ

public class AuthInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // ์ธ์ฆ ๋กœ์ง
        if (!isAuthenticated(request)) {
            response.sendRedirect("/login");
            return false;
        }
        return true;
    }
}

๐Ÿ†š Servlet Filter vs HandlerInterceptor

  • Filter ์™€ Interceptor ๋Š” ํ•˜๋Š” ๋™์ž‘์€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ์‹คํ–‰ ์‹œ์ ์ด ๋‹ค๋ฅด๋‹ค.
๊ตฌ๋ถ„FilterHandlerInterceptor
์‹คํ–‰ ์‹œ์ DispatcherServlet ์ „/ํ›„DispatcherServlet ์ดํ›„, Controller ์ „/ํ›„
๋ฒ”์œ„Spring ์™ธ ์„œ๋ธ”๋ฆฟ ์ „์—ญSpring MVC ๋‚ด๋ถ€
Spring ๊ธฐ๋Šฅ ์ ‘๊ทผ๋ถˆ๊ฐ€๋Šฅ (HandlerExceptionResolver ๋“ฑ)๊ฐ€๋Šฅ
์‚ฌ์šฉ ๋ชฉ์ ์ธ์ฝ”๋”ฉ, XSS ํ•„ํ„ฐ๋ง, ๋กœ์šฐ HTTP ์ฒ˜๋ฆฌ์ธ์ฆยท์ธ๊ฐ€, ๋กœ๊น…, MVC ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ

์ค‘์š”: Filter๋Š” Spring MVC ์ด์ „์— ์‹คํ–‰๋˜๋ฏ€๋กœ, Spring ๋นˆยทMVC ๊ธฐ๋Šฅ์— ์ ‘๊ทผ ๋ถˆ๊ฐ€


โš ๏ธ ์ฃผ์˜ํ•  ์ 

  • Interceptor๋Š” Spring MVC HandlerMapping ์ดํ›„ ๋™์ž‘ํ•˜๋ฏ€๋กœ, ์ •์  ๋ฆฌ์†Œ์Šค ์š”์ฒญ์—๋„ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Œ (์ œ์™ธ ํŒจํ„ด ์„ค์ • ํ•„์š”)
  • preHandle์—์„œ false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋‚˜๋จธ์ง€ ์ฒด์ธ์ด ์ค‘๋‹จ๋จ
  • ์ธ์ฆยท๋ณด์•ˆ ๋กœ์ง์€ Interceptor, HTTP ์š”์ฒญ ์ „์ฒ˜๋ฆฌ๋Š” Filter๋ฅผ ๊ณ ๋ ค

๐Ÿ”— ๊ด€๋ จ