SpringBoot 게시판 프로젝트

스프링부트(SpringBoot) 게시판 만들기 (10) - 인터셉터 로그 출력

얼뚱인데요 2024. 7. 7. 22:44
인터셉터 처리하기

 

인터셉터란?

스프링에서 제공해주는 기능 중 하나로, 컨트롤러의 메서드에 접근하는 과정에서

무언가를 채갈 때(제어할 때) 사용하는 기능이다. 

 

예를 들어, 회원제 커뮤니티라고 가정하면

로그인 회원만 접근 할 수 있는 권한을 주는 로직이 필요한데

이를 인터셉터를 이용하여 효율적으로 처리할 수 있다.

 

1) HandlerInterceptor를 이용해서 인터셉터 구현하기

 

인터셉터는 HandlerInterceptor 인터페이스를 implements 하여 구현할 수 있다. 

해당 인터페이스는 preHandle( ), postHandle( ),  afterCompletion( ) 총 세 개의 추상 메서드를 포함한다.

여기서는 preHandle()과 postHandle() 메서드만 구현한다.

 

해당 클래스에서 마우스 우클릭 - Generate - Implement Methods 에서 구현해야 할 메서드를 선택하여 추가할 수 있다.

 

LoggerInterceptor.java

package com.study.interceptor;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.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("====================================================");
        log.debug("==================== BEGIN ========================");
        log.debug("Request URI ===> " + request.getRequestURI());
        return HandlerInterceptor.super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }
}

 

 

2) WebMvcConfigurer 인터페이스 구현 - WebMvcConfig 클래스 추가

 

LoggerInterceptor 클래스가 작동할 수 있도록 클래스를 빈(Bean)으로 등록해 주어야 하는데,

이를 위해 WebMvcConfigurer 인터페이스를 구현한 설정 클래스가 필요하다.

 

WebMvcConfig.java

package com.study.config;

import com.study.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 WebMvcConfig implements WebMvcConfigurer {
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoggerInterceptor())
                .excludePathPatterns("/css/**", "/images/**", "/js/**");
    }
}

 

3) 인터셉터 테스트 해보기

앱 실행 후 목록 페이지 접속해보면 preHandle()과 postHandle() 메서드에 작성한 로직대로 로그가 출력이 된다.

 

우선은 로그 출력까지만 사용해보고, 회원 기능 구현 때 제대로 사용할 예정!


모든 코드는 아래 블로그를 참고합니다!

 

 

스프링 부트(Spring Boot) - 인터셉터(Interceptor) 적용하기

이전 글에서는 애플리케이션에 로그백(Logback)을 적용해서, 특정 기능이 실행되었을 때 IDE 콘솔에 SQL 쿼리 로그를 출력하는 방법을 알아보았습니다. 이번에는 스프링에서 제공해주는 기능 중 하

congsong.tistory.com