Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- ajax
- Java
- git
- Lombok
- mybatis
- Static
- AWS
- r
- reactor
- html
- cache
- mongodb
- socket
- reactive
- spring
- 네트워크
- github
- network
- VCS
- Heap
- redis
- effective
- libuv
- NoSQL
- 데이터통신
- javascript
- nodejs
- Linux
- HTTP
- Elk
Archives
- Today
- Total
빨간색코딩
spring의 다양한 intercept 방법 (Servlet Filter, HandlerInterceptor, PreHandle, AOP) 본문
Spring
spring의 다양한 intercept 방법 (Servlet Filter, HandlerInterceptor, PreHandle, AOP)
빨간색소년 2018. 8. 3. 19:361. 다양한 intercept 방법들과 주 사용처
- Servlet Filter : 인코딩, 인증, 압축, 변환 등
- HandlerInterceptor : 세션, 쿠키, 검증 등
- AOP : 비즈니스단 로깅, 트랜잭션, 에러처리 등
2. Servlet Filter 와 HandlerInterceptor 차이
- Servlet Filter : Dispatcher Servlet의 앞단에서 들어오는 요청을 처리
- J2EE 스펙
- spring과 무관
- HandlerInterceptor : Dispatcher Servlet의 뒤의 Handler 영역에서 요청을 처리
- org.springframework.web.servlet.handler 패키지가 제공
- 흐름 정리 : Request -> Servlet Filter -> Dispatcher Servlet -> HandlerInterceptor -> Controller
3. HandlerInterceptorAdapter의 메소드
HandlerInterceptorAdapter는 추상클래스로서 메소드들을 재정의해서 쓰면 된다.
preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
- 반환 값이 true 일 경우, 컨트롤러에게 요청을 넘긴다. flase 일 경우 컨트롤러를 실행조차 하지 않는다.
- Object handler 는 HandlerMapping이 사용하는 인자
postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
- view 랜더링 전에 해당 메소드가 호출된다.
- modelAndView 인자를 이용해 view model 조작이 가능
- afterComplete(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
- view 랜더링 후 호출되는 메소드 컨트롤러 진입 후 view가 정상적으로 랜더링 된 후 제일 마지막에 실행이 되는 메서드입니다.
- afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler)
- 비동기 서블릿 관련
Interceptor 가 여러개라면?
만약 HandlerInterceptorAdapter를 여러 곳에서 상속받아서 PreHandle 가 여러개일 때는!? (당연히) 정의한 순서대로 동작한다..!
xml 설정이라면
<mvc:interceptors> <!-- 1번 --> <mvc:interceptor> <mvc:mapping path="/**"/> <mvc:exclude-mapping path="/login*"/> <bean class="경로" /> </mvc:interceptor> <!-- 2번 --> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="경로"/> </mvc:interceptor> <!-- 3번 --> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="경로"/> </mvc:interceptor> </mvc:interceptors>
java bean 설정이라면 WebMvcConfigurerAdapter 를 상속받은 addInterceptors에 추가되는 대로 일 것이다.
4. HandlerInterceptor 와 AOP 차이
AOP 관련포스팅 : http://sjh836.tistory.com/157
- HandlerInterceptor 는 위에서 많이 이야기했고..
- AOP는 주로 비즈니스 로직단에서 횡단관심(로깅, 트랜잭션, 공통예외처리) 분리할 때 사용한다.
- 둘은 비슷하지만, 가장 큰 차이는 AOP가 JoinPoint를 이용해 메소드의 매개변수에만 접근할 수 있다는 것이다. 물론 컨트롤러의 메소드가 HttpServletRequest를 사용한다면 HandlerInterceptor와 동일할 수 있다. (모든 컨트롤러 메소드에서 이렇게 쓰진 않으니..)
- 따라서 요청과 응답에 항상 무언가 수행을 해야한다면, aop보단 HandlerInterceptor 가 맞다.
'Spring' 카테고리의 다른 글
Comments