본문 바로가기
Web

Spring Interceptor 클래스 구현하기

by _dreamgirl 2023. 7. 19.
반응형

 
--필터(Filter)란 
Dispatcher Servlet에 요청되기 전/후에 URL에 맞는 모든 요청에 대해 부가작업을 처리하는 기능을 제공 
필터는 Spring Context 밖 Web Context 범위 안이다. 

--인터셉터(Interceptor)란 
Spring Context안에서 동작하며 Dispatcher Servlet과 Controller 사이에서 동작 
인터셉터가 없다면 바로 컨트롤러를 실행한다. 
인터셉터를 통해 Controller의 핸들러가 실행되기 전과 후 추가적인 작업을 원할 때 사용

--인터셉터 구현하는 방법 
HandlerInterceptorAdapter 혹은 HandlerInterceptor를 상속받아 구현 가능하다. 
HandlerInterceptorAdapter의 경우 Spring 5.3 이상 버전에서는 Deprecated 되었기 때문에 HandlerInterceptor를 구현하는 것을 권장한다.

PreHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
--Controller(RequestMapping 선언 Handler) 실행 직전에 동작하는 method.
return 값이 true일 경우 정상적으로 진행

PostHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
-- Controller 진입 후 View가 Rendering 되기 전 수행

afterComplete(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
-- Controller 진입 후 View가 정상적으로 Rendering 된 후 수행


참고로, 스프링 레거시 프로젝트는 XML 기반으로 스프링 설정 (XML Configuration)을 하고 최근은 Java 어노테이션으로 설정하는 방식 (Java Configuration)을 사용한다. 
Spring 3 버전부터 <mvc:interceptors> element에서 url별로 interceptor를 적용할 수 있도록 추가하여 SimpleUrlAnnotationHandlerMapping은 deprecated 되었다. 
그리고 전자정부프레임워크 지원센터에 문의를 해본 결과 Spring v2.5.6에서는 해당 설정을 지원하지 않으므로 
<mvc:interceptor> 관련 설정들을 사용하기 위해서는 spring-webmvc 버전만 v2.5.6에서 정상 동작했던 v3.0.5로 올려서 진행해 보라고 안내받았다. 하지만 v2.5.6에서 라이브러리 업데이트 없이도 가능했다. 
HandlerInterceptor 구현하지 말고 HandlerInterceptorAdapter를 상속 받아서 클래스를 만들고 dispatcher-servelt.xml에 interceptor를 등록한다.

https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:ptl:handlermapping

--인터셉터 개념 추가로 이해하기
https://velog.io/@gillog/Spring-InterceptorHandlerInterceptor-HandlerInterceptorAdapter
https://mangkyu.tistory.com/173
--인터셉터 예제
https://popo015.tistory.com/115
--dispatcher-servelt.xml에서 interceptor 클래스 등록하기 

<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"></> 
            <bean id="클래스명" class="패키지명.클래스명"></bean>
        </mvc:interceptor>
</mvc:interceptors>


failed to read schema document 'https //www.springframework.org/schema/mvc/spring-mvc-3.0.xsd'
https://benfatto.tistory.com/14

--필터의 개념 추가로 이해하기
https://gardeny.tistory.com/35

--DelegatingFilterProxy 관련 내용
2005년 Spring 1.2 가 정식 배포되면서 DelegatingFilterProxy 추가되었는데  필터에서도 스프링의 빈을 사용가능하다.
https://mangkyu.tistory.com/221
https://soojae.tistory.com/54
https://goodteacher.tistory.com/590
http://www.talkdev.net/filter%EC%97%90%EC%84%9C-spring-bean-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0/

Srping 공식 사이트
https://docs.spring.io/spring-security/reference/servlet/architecture.html#servlet-filters-review
- https://docs.spring.io/spring-framework/docs/5.3.9/javadoc-api/org/springframework/web/servlet/handler/HandlerInterceptorAdapter.html

반응형

댓글