인터셉터 처리하기
인터셉터란?
스프링에서 제공해주는 기능 중 하나로, 컨트롤러의 메서드에 접근하는 과정에서
무언가를 채갈 때(제어할 때) 사용하는 기능이다.
예를 들어, 회원제 커뮤니티라고 가정하면
로그인 회원만 접근 할 수 있는 권한을 주는 로직이 필요한데
이를 인터셉터를 이용하여 효율적으로 처리할 수 있다.
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
'SpringBoot 게시판 프로젝트' 카테고리의 다른 글
스프링부트(SpringBoot) 게시판 만들기 (12) - 페이징 & 검색 기능 구현 (0) | 2024.07.13 |
---|---|
스프링부트(SpringBoot) 게시판 만들기 (11) - AOP와 트랜잭션 개념 (0) | 2024.07.08 |
스프링부트(SpringBoot) 게시판 만들기 (8) - Alert 메시지 처리하기 (4) | 2024.07.05 |
스프링부트(SpringBoot) 게시판 만들기 (7) - 게시글 삭제 기능 구현 (0) | 2024.07.05 |
스프링부트(SpringBoot) 게시판 만들기 (6) - 게시글 상세 정보 조회/ 수정 기능 구현 (0) | 2024.07.04 |