금융에 대한 모든 것

인터셉터란?

인터셉터는 웹 MVC 동작과정 중에서 할 수 있습니다. 예를 컨트롤러를 실행하기 전, 컨트롤러를 실행 후, 뷰 실행전, 뷰를 실행한 이후에 메서드를 실행하여 특정 시점에서 원하는 기능을 실행시킬 수 있습니다.

 

HandlerInterceptor 클래스의 메서드

 인터셉터 클래스를 만들기 위해서는 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 패턴을 입력합니다.

 

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 등이 일치

반응형