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

 

래퍼 없을땐 1번만 적용됨
래퍼 재정의 해서 반복가능

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

+ Recent posts