WEB/back-end

Interceptor

danbibibi 2023. 4. 22. 12:22

Interceptor

: Request 객체를 컨트롤러의 핸들러로 도달하기 전에 낚아채서 개발자가 원하는 추가작업을 한 후 핸들러로 보낼 수 있도록 해주는 것

추가적인 작업
로그인 체크, 권한 체크 등

 

관련 메소드

preHandle()

  • 컨트롤러가 호출되기 전에 실행
  • false를 반환하면 request를 바로 종료

 

postHandle()

  • 컨트롤러 수행 후 호출
  • 비동기적 요청 처리 시에는 처리되지 않음
  • preHandle()에서 리턴 값이 false인 경우 미실행
  • 적용 중인 인터셉터가 여러개인 경우, preHandle() 역순으로 호출

 

afterCompletion()

  • view를 통해 클라이언트에 응답을 전송한 뒤  실행
  • 요청 처리 중에 사용한 리소스를 반환해주기 적절한 메소드
  • preHandle()에서 리턴 값이 false인 경우 미실행
  •  예외가 발생하여도 실행
  • 비동기적 요청처리 시에는 처리되지 않음

 

사용 방법

pom.xml

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

 

servlet-context.xml

<context:component-scan base-package="com.danbi.interceptor" />

<!-- /regist 요청에 대해 sessionInterceptor를 등록 -->
<interceptors>
    <interceptor>
        <mapping path="/regist" />
        <beans:ref bean="sessionInterceptor" />
    </interceptor>
</interceptors>

 

SessionInterceptor.java

package com.danbi.interceptor;

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

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

@Component
public class SessionInterceptor implements HandlerInterceptor{

	// 사용자의 요청을 처리하기 전에 session에 loginUser가 있는지 판단
	// 정보가 있다면 그대로 진행하고, 정보가 없다면 index 페이지로 이동
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		HttpSession session = request.getSession();
		if(session.getAttribute("loginUser")!=null) {
			return true;
		}else {
			response.sendRedirect(request.getContextPath()+"/index");
			return false;
		}
	}
}