1. 실행되는 순서가 다르다. / 관리되는 컨테이너가 다르다 ( Filter -> web container / Interceptor -> Spring container)
why?
filter는 자바에서 제공하는
interceptor는 스프링에서 제공 -> DispatcherServlet에 의해 호출됨 -> HttpServletRequest, HttpServletResponse 객체를 변경할 수 없다! ( filter는 가능)
2. 어댑터 또는 데코레이터 패턴 적용여부
Filter O
-> filter의 경우 디스펫치서블렛 불리기 이전이므로 /
서블릿 리퀘스트를 요청받아 -> HTTP서블릿 리퀘스트 -> filter -> chain.doFilter
doFilter 에서 요청(Request)/ 응답(Response) 변경할 수 있음
-> Filter에서 선택적으로 요청, 응답 객체를 사용자 정의 구현체로 래핍하여 어댑터(래퍼), 또는 데코레이터 패턴으로 적용가능
Interceptor X
3. 이러한 이유로
Filter
< 스프링과 무관하게 전역적으로 처리해야하는 작업, 웹 어플리케이션에 전반적으로 사용되는 기능>
@ 공통된 보안 및 인증
- 전역적으로 해야하는 보안 검사 (XSS,CSRF 방어 등)
@ 모든 요청에 대한 로깅 또는 감사 (위험 관리)
@ 이미지/ 데이터 압축 및 문자열 인코딩
@ Spring과 분리하려는 모든 기능
대표적으로 SpringSecurity가 Filter 기반의 인증 및 인가를 검사 할 수 있다. 따라서 Spring MVC에 종속적이지 않다
Interceptor
<클라이언트 요청과 관련되어 전역적으로 처리해야하는 작업>
@ 세부적인 보안 및 인증
- 클라이언트 요청과 관련된 인증, 인가 작업.
특정 그룹의 사용자에 대한 기능 제한 등
@API 호출에 대한 로깅 또는 감사
@Controller로 전달되는 정보의 가공
https://www.youtube.com/watch?v=nQizVrBYCO0&t=559s
'WEB Creator > [Spring]' 카테고리의 다른 글
[Spring] @Controller와 @RestController (0) | 2022.08.31 |
---|---|
[Spring] File Download (0) | 2022.08.25 |
[Spring] File Upload (0) | 2022.08.25 |