본문 바로가기
스프링부트+gradle+JSP+STS(Eclipse)

스프링부트 인터셉터(Interceptor) 설정

by 크리스턍 2022. 5. 9.

인터셉터란?

 - 클라이언트의 요청을 가로채서 처리하는 기능

 - 컨트롤러 진입 전, 컨트롤러 처리 후, 화면 처리 후 호출 가능

 

1. 인터셉터 클래스 생성

 - preHandle : 컨트롤러 진입 전 호출

   ex) 로그인 여부 체크

 - postHandle : 컨트롤러 처리 후 호출

   ex) 화면으로 로그인 정보 전달, 파라미터 전달

 - afterCompletion : 화면 호출(화면 렌더링) 까지 끝난 뒤 호출

   ex) 화면 호출 후 로그 쌓기

package com.example.demo.config;

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

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

@Component
public class InteceptorConfig implements HandlerInterceptor {
	
	// preHandle -> Controller -> postHandle -> 화면처리 -> afterCompletion

	// 컨트롤러 가기 전 실행
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("preHandle");
		return true;
	}

	// 컨트롤러 처리 끝난 뒤 실행
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
		System.out.println("postHandle");
	}

	// 화면 처리가 끝난 뒤 실행
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
		System.out.println("afterHandle");
	}

}

 

2. WebConfig.java 의 addInterceptors 메소드에 인터셉터 설정 추가

 - 인터셉터 클래스를 추가한 뒤 인터셉터 처리를 할 URL 패턴과 예외처리 할 URL 패턴을 추가한다.

package com.example.demo.config;

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

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

@Component
public class InteceptorConfig implements HandlerInterceptor {
	
	// preHandle -> Controller -> postHandle -> 화면처리 -> afterCompletion

	// 컨트롤러 가기 전 실행
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("preHandle");
		return true;
	}

	// 컨트롤러 처리 끝난 뒤 실행
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
		System.out.println("postHandle");
	}

	// 화면 처리가 끝난 뒤 실행
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
		System.out.println("afterHandle");
	}

}

 

3. 테스트

 - 샘플URL(http://localhost:8080/sample/dashboard) 호출 후 인터셉터가 순차적으로 잘 타는지 확인

 

댓글