danbibibi
article thumbnail
Published 2023. 4. 22. 12:22
Interceptor WEB/back-end

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;
		}
	}
}

 

'WEB > back-end' 카테고리의 다른 글

Spring File Upload (Apache Commons FileUpload)  (1) 2023.04.24
Spring MVC 실습  (0) 2023.04.24
AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)  (0) 2023.04.22
Spring  (0) 2023.04.21
JDBC를 이용한 DB 연결 (MySQL)  (0) 2023.03.24
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로