코딩하는 문과생
[Spring] Spring 프레임워크(12) - 인터셉터와 로그인 본문
[인터셉터]
- Spring Interceptor
- 서블릿 필터와 유사: 모든 요청과 응답 시 거쳐야 함
- 서블릿 필터와 다름: 스프링 컨테이너 로딩 후 적용

- preHandle: 컨트롤러 실행 전
- postHandle: 컨트롤러 실행 후, 아직 뷰를 실행하기 전
- afterCompletion: 뷰를 실행한 이후
-사례: 웹 요청 처리 시간을 측정하는 Interceptor
preHandle과 afterCompletion을 이용해 제작
HandlerInterceptorAdapter 상속받아서 인터셉터 생성
servlet-context(web과 관련된 설정파일)에서 설정: 하나의 빈으로 설정, 특정경로 설정 가능
[로그인 처리]
- 로그인 Interceptor = 세션트래킹
- 로그인시 세션에 사용자 정보를 저장한다.
- <mvc:mapping>, <mvc:exclude>를 이용해 url맵핑 가능
- 인터셉터가 선언된 순서대로 실행된다. 체이닝형태로 작성이 가능하다.
[AOP와 인터셉터 차이점]
공통점: 둘다 호출을 가로챈다
차이점: AOP는 서비스와 DAO에서, 인터셉터는 Controller 호출을 가로챈다.
ex. 인터셉터 작성: 웹 요청 처리 시간을 측정하는 Interceptor
- MeasuringInterceptor
package kr.co.acomp.hello.Interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class MeasuringInterceptor extends HandlerInterceptorAdapter{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
request.setAttribute("mi.beginTime", System.currentTimeMillis());
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
long beginTime = (long)request.getAttribute("mi.beginTime");
long endTime = System.currentTimeMillis();
System.out.println(request.getRequestURI() + " executing Time: " + (endTime - beginTime));
}
}
-servlet-context.xml 추가
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/bbs/**/"/>
<bean id="measuringInterceptor" class="kr.co.acomp.hello.Interceptor.MeasuringInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
-BbsController 수정
@GetMapping("")
public String index() {
// bbsService.registArticle(new Article(5, "jj", "test", "testtest"));
//예외가 여기로 넘어온다.->GlobalExceptionHandler가 호출
return "index";
}

'웹 프로그래밍 > Spring' 카테고리의 다른 글
[Spring] JDBC, NullPointException (1) | 2020.11.25 |
---|---|
[Spring] Spring 프레임워크(11) - 예외처리 (0) | 2020.03.12 |
[Spring] Spring 프레임워크(10) - 트랜잭션과 로깅 (0) | 2020.03.12 |
[Spring] Spring 프레임워크(9) - AOP (0) | 2020.03.12 |
[Spring] Spring 프레임워크(8) - MyBatis (0) | 2020.03.10 |