인터셉터(Interceptor)는 웹 애플리케이션에서 들어오는 요청과 나가는 응답을 가로채어 처리하는 컴포넌트이다. 인터셉터는 특정 Controller의 핸들러가 실행되기 전이나 후에 추가적인 작업을 원할 때 사용한다.
- preHandle : 컨트롤러(Handler)가 호출되기 전에 실행. 이 메소드에서는 주로 인증 확인 같은 처리를 수행하며, 이 메소드가
false
를 반환하면 요청 처리가 중단된다.
- postHandle : 컨트롤러가 성공적으로 실행된 후, 뷰를 렌더링하기 전에 호출된다. 이 시점에서는 컨트롤러에서 예외가 발생하지 않은 경우에만 실행된다.
- afterCompletion : 요청 처리의 마지막 단계에서 호출된다. 이 메소드는 뷰가 렌더링된 후에 실행되므로, 사용자에게 응답이 전송된 후에 실행된다. 이 시점에서는 요청 처리 중에 발생한 모든 예외를 포함하여 처리가 완료된 후의 작업을 수행할 수 있다.
1. 인터셉터 만들기
_core/interceptor/LoginInterceptor
public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); User sessionUser = (User) session.getAttribute("sessionUser"); if(sessionUser ==null){ throw new Exception401("로그인이 필요합니다."); } return true; } }
세션값이 없다면 에러 401 페이지로 throw 한다.
2. Configuration 만들기
@Configuration // ioc 등록 public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { //인증 체크 registry.addInterceptor(new LoginInterceptor()) .addPathPatterns("/board/**","/user/**") .excludePathPatterns("/board/{id:\\d+}"); } }
addPathPatterns 는 인증이 필요한 주소, excludePathPatterns 는 제외할 주소를 설정한다.
정규표현식을 통해 게시글 상세보기 주소를 제외한 페이지는 인증이 필요하도록 한다.
Share article