인터셉터는 웹 MVC 동작과정 중에서 할 수 있습니다. 예를 컨트롤러를 실행하기 전, 컨트롤러를 실행 후, 뷰 실행전, 뷰를 실행한 이후에 메서드를 실행하여 특정 시점에서 원하는 기능을 실행시킬 수 있습니다.
인터셉터 클래스를 만들기 위해서는 HandlerInterceptor라는 클래스를 상
메서드 명 |
설명 |
preHandle() |
컨트롤러를 실행하기 전에 실행되는 메서드로, false를 리턴하면 컨트롤러를 실행하지 않습니다. |
postHandle() |
컨트롤러가 정상적으로 실행된 이후에 실행되는 메서드로 익셉션을 발생하면 실행되지 않습니다. |
afterCompletion() |
뷰가 클라이언트 응답을 전송한 뒤 실행됩니다. |
HandlerInterceptAdapter를 상속 받은 클래스 파일을 생성합니다. 단축기 Alt + Shift + S를 이용하여 해당 메서드들을 오버라이딩 합니다.
HomeInterceptor.java
public class HomeInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
super.afterCompletion(request, response, handler, ex);
}
}
위와 같이 HandlerInterceptor를 상속 받는 클래스를 생성하여 preHandle, postHandler, afterCompletion 세가지 메서드를 재정의 합니다.
servlet-context.xml
<!-- 인터셉터 선언 -->
<beans:bean id="homeInterceptor" class="com.example.spring01.HomeInterceptor" />
<!-- 인터셉터와 url맵핑 -->
<interceptors>
<interceptor>
<mapping path=""/>
<beans:ref bean="homeInterceptor" />
</interceptor>
</interceptors>
<beans:bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<beans:property name="order" value="0"/>
</beans:bean>
addInterceptor메서드를 통해 적용 할 인터셉터 클래스를 전달하고 addPathPatterns메서드의 인자로 인터셉터를 적용할 url 패턴을 입력합니다.
패턴 |
설명 |
* |
0개 또는 그 이상의 글자 |
? |
1개의 글자 |
** |
0개 또는 그 이상의폴더 경로 |
예시
@RequestMapping("/member /?*.info")
/member로 시작하고 확장자가 .info로 끝나는 모든 경로
@RequestMapping("/faq/f?oo.fq")
/faq/f로 시작하고, 1글자가 사이에 위하고 oo.fq로 끝나는 모든 경로
@RequestMapping("/folders/**/files")
/folders/로 시작하고, 중간에 0개 이상의 중간 경로가 존재하고 /files로 끝나는 모든 경로, 예를 들어 /folders/files, /folders/files, /folder/1/2/3/files 등이 일치
[Spring] 스프링 AOP로 로그 수집하기 (0) | 2020.12.11 |
---|---|
[Spring MVC] 스프링 Validator로 커맨드 객체 값 검증 (0) | 2020.12.11 |
[Spring] 스프링 프로젝트의 기본 구조와 메이븐 (0) | 2020.12.11 |
[Spring] Bean Validation(JSR-303) 으로 객체 값 검증하기 (0) | 2020.12.11 |
[Spring] 스프링 프로젝트 만들기 (0) | 2020.12.11 |