spring practice_0612

Choi Suyeon·2024년 6월 12일

interceptor

Main Controller에서 HandlerMapper를 호출하기 전, Controller를 호출한 이후 응답, 최종적으로 응답을 참조하거나 변경할 수 있는 Filter객체.
개발자가 특정 작업을 수행하기 전 또는 이후에 작업을 가로채서 기능을 추가(ex, 로그인체크, 권한체크)하거나 변경할 때 사용.
org.springframework.web.servlet.HandlerIndercepter 인터페이스로 제공

  • 구현방법
1. HandlerInterceptor 구현
public class TestInterceptor implements HandlerInterceptor{

	2. HandlerInterceptorAdaptor 상속
    public class TestInterceptor extends HandlerInterceptorAdaptor{
    }
}

  • preHandle()
    -Main Controller가 HandlerMapper를 실행하기 전에 처리해야 할 작업이 있거나,
    요청 정보를 전처리( 변경, 추가)해야 하는 경우에 사용.
    -return
    true- preHandle를 호출한 후 다음 작업으로 진행한다.
    false - preHandle를 호출한 후 다음 작업 ( Controller, Interceptor의 남은 작업)을 수행하지 않는다.
    -preHandle()은 여러 개의 Interceptor가 등록되어도 순차적으로 후출( post, after는 역순으로 호출)

  • postHandle()
    -Controller호출 이후 호출.
    -Controller에서 반환하는 ModelAndView를 받을 수 있다. ( M.A.V객체가 가진 값을 처리할 수 있다.)
    -preHandle() method가 false를 반환하면 실행되지 않는다.
    -비동기 요청일 때에는 처리되지 않는다.
    -여러 개의 Interceptor가 등록되어있을 때에는 역순으로 호출된다.

  • afterCompletion()
    -view를 생성한 후 응답되기전 호출
    -요청시에 사용된 자원들의 해제할 때 ( 자원의 반납 ) 사용하면 적합.
    -preHandle() method false를 반화하면 실행되지 않는다.
    -비동기로 요청 될때에는 호출되지 않는다.
    -적용중인 intercptor가 여러 개인 경우에는 역순으로 호출된다.

  • 작성법

1.HandlerInterceptor를 구현.
public class 인터셉터명 implements HandlerInterceptor{

2. default method를 Override하고 코드 구현.

3. Intercepro를 적용할 URL을 설정. => servlet-context.xml에 설정
  <interceptors>
    <interceptor>
       <mapping path=“”/> //적용할 URL: /** <=모든 URL
       <exclude-mapping path=“”/> //제외될 URL
       <exclude-mapping path=“”/>
       <beans:bean id=“아이디” class=Interceptor클래스”/>
    </interceptor>
  </interceptors>

0개의 댓글