[Spring] Filter, Interceptor

aljongjong·2022년 2월 16일
0

학원 복습일지

목록 보기
81/84

1) 먼저 filter 사용의 기본 클래스 구성은 기존 servlet/jsp와 spring의 차이는 없다. javax.servlet.Filter 인터페이스를 구현하고 추상메소드들을 오버라이딩 해주면 된다. 그리고 첫 번째 방법으로 filter 클래스위에 @WebFilter을 사용해 필터링 될 urlPattern을 설정해주면 된다. 아래와 같이 모든 urlPattern을 설정해주고 실행을 해보면 filter가 잘 실행되는 것을 알 수 있다.

2) 그리고 두 번째 방법으로 web.xml과 root-context.xml에 필터를 등록하고 설정해주는 방법이 있다.

  • root-context.xml에 Filter 클래스를 선택하고 id를 지정하여 등록
  • web.xml에 bean으로 등록한 filter를 가지고와 spring을 활용해 filter mapping해준다.
  • @WebFilter를 주석처리하고 실행했을때도 filter가 잘 실행되는 것을 알 수 있다.

3) filter는 사용자와 spring container 사이에 존재한다. 그렇다면 interceptor는 어느 사이에 존재할까? spring container 안에서 사용자의 요청이 dispatcher servlet을 통해 각 servlet으로 매칭되어 이동하는 그 사이에 interceptor가 작동하게 된다. interceptor를 만드는 방법은 크게 2가지 방법이 있다. 첫 번째는 HandlerInterceptor 인터페이스 구현, 두 번째는 HandlerInterceptorAdapter 클래스 상속으로 interceptor를 만든다. 이를 위해 3가지 메소드를 오버라이딩 해야한다. 먼저 servlet에 가기전 실행되는 prehandle, servlet이 동작한 후 실행되는 postHandle, 그리고 화면으로 넘어가기 전 실행되는 afterCompletion 메소드가 있다. preHandle 메소드에선 처리하는 servlet 정보를 확인할 수 있다. 아래 이미지에선 기본 spring 프로젝트 파일 생성시 존재하는 homecontroller에 접근할 때 실행된 콘솔 내용이다. homecontroller가 처리하는 home.jsp의 log정보가 preHandle이후 실행되는 것을 확인할 수 있고 그 후 postHandle이 실행되는 것을 볼 수 있다. 그리고 마지막으로 afterCompletion이 실행된다.

0개의 댓글