[Spring] Interceptor

SHINYEJI·2023년 10월 24일
0

Back-End

목록 보기
5/24

📌 HandlerInterceptor를 통한 요청 가로채기

  • Dispatcher servlet이 Controller를 호출하기 전/후에 가로챌 수 있다.
  • 실제 비즈니스 로직과 분리되어 처리해야 하는 기능(로깅,모니터링 정보 수집, 접근 제어 등) 처리를 넣어야 할 때 유용하다.
  • Interceptor는 여러개 설정할 수 있고 설정한 순서대로 실행된다.




Interceptor (HanlerInterceptor가 제공하는 메소드)

🔴 preHandle

boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

  • false 반환 시 request를 바로 종료한다.

🔴 postHandle

void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)

  • Controller 수행 후 호출한다.

🔴 afterCompletion

void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)

  • view를 통해 클라이언트에 응답을 전송한 뒤 실행한다.
  • 예외가 발생해도 실행한다.




호출 순서

Interceptor 사용 방법

  1. interceptor 클래스를 작성하여 bean 등록하기
  2. interceptor bean이 동작할 path와 함께 interceptor 설정 등록
  • Interceptor는 web에 관한 설정임으로 sevlet-context.xml에 작성해야 한다.

sevlet-context.xml

	<beans:bean id="confirm" class="com.ssafy.interceptor.ConfirmInterceptor"/>

	<interceptors>
		<interceptor>
			<mapping path="/article/write"/>
			<mapping path="/article/view"/>
			<mapping path="/article/modify"/>
			<mapping path="/article/delete"/>			
			<beans:ref bean="confirm"/>
		</interceptor>
	</interceptors>
	<interceptors>
		<interceptor>
			<mapping path="/article/*"/>
			<exclude-mapping path="/user/log*"/> <!-- interceptor 제외 -->
			<beans:bean class="com.web.interceptor.ConfirmInterceptor"/>
		</interceptor>
	</interceptors>

0개의 댓글