Backend/스프링부트 시작하기

Spring Boot 게시판 구현하기 7 (인터셉터 사용하기)

:_: 2022. 4. 19. 18:46

'[책] 스프링부트 시작하기 (김인우)'를 공부하면서 적은 내용입니다.


인터셉터 사용하기

스프링의 인터셉터는 어떠한 URI을 호출했을 때 해당 요청의 컨트롤러가 처리되기 전 또는 후에 작업을 하기 위해 사용된다. 이러한 역할은 필터(Filter)와 인터셉터(Interceptor)로 수행할 수 있다.

 

필터는 디스패처 서블릿 앞 단에서 동작하지만, 인터셉터는 디스패처 서블릿에서 컨트롤러로 가기 전에 동작합니다.

필터와 달리 인터셉터는 스프링 빈을 사용할 수 있습니다.

 

HandlerInterceptorAdapter로 인터셉터 구현하기

Spring에서 인터셉터는 HandlerInterceptorAdapter 클래스를 상속받아 구현할 수 있다.

메소드 역활
preHandle 컨트롤러 실행 전에 수행
postHandle 컨트롤러 수행 후 결과를 뷰로 보내기 전에 수행
afterCompletion 뷰의 작업까지 완료된 후 수행

 

com/insight/board 패키지 아래에 interceptor 패키지를 생성하고 LoggerInterceptor 클래스를 생성합니다.

 

LoggerInterceptor.java

package com.insight.board.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import lombok.extern.slf4j.Slf4j;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

@Slf4j
public class LoggerInterceptor implements HandlerInterceptor{

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.debug("==================== START ====================");
        log.debug(" Request URI \t: " + request.getRequestURI());
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        log.debug("==================== END ====================");
    }
}

public boolean preHandle() : 컨트롤러가 수행 되기 전 수행

public void postHandle() : 컨트롤러가 정상적으로 실행 된 후 수행

 

Interceptor 등록하기

앞서 만든 LoggerInterceptor를 스프링 빈으로 등록해보겠습니다.

configuration 패키지 안에 WebMvcConfiguration 클래스를 생성하고 아래 내용을 작성합니다.

 

WebMvcConfiguration.java

package com.insight.board.configuration;

import com.insight.board.interceptor.LoggerInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;



@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoggerInterceptor());
    }
}

registry.addInterceptor(new LoggerInterceptor()) : 인터셉터를 등록

addPathPatterns() 와 excludePathPatterns() 메소드를 이용하여 요청 주소의 패턴과 제외할 요청 주소의 패턴을 지정하여 선택적으로 적용할 수도 있습니다.

여기서는 모든 요청에 대해 인터셉터를 적용하므로 따로 패턴 적용하지 않았다.

 

728x90