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 |