인프런 커뮤니티 질문&답변
안녕하세요 강사님 필터 사용 상황에 있어 질문 드립니다
작성
·
422
0
스프링 시큐리티의 필터는 디스패처 서블릿에 도착전 요청을 처리 하거나, 디스패처 서블릿으로 부터의 응답을 처리하는데 사용이 되는데요.
디스패처 서블릿 에서 스프링 빈에 접근시에 처리를 할 수있는 인터셉터가 존재하는데요
이 둘은 어떨때 사용하는게 적절한지 모르겠습니다.
큰 차이가 없는거같기도 하구요... 차이점이나 각각의 적합한 사용 상황이 궁금합니다.
요약
- 필터를 쓰기 적합한 상황
- 인터셉트를 쓰기 적합한 상황
감사합니다
답변 1
11
네
여러가지 요소가 있을 수 있는데 일반적으로 필터는 스프링과 무관하게 전역적으로 처리해야 하는 작업들을 처리할 수 있습니다.
가령 전역적으로 해야 하는 보안 검사(XSS 방어 등)를 하여 올바른 요청이 아닐 경우 사전에 차단을 할 수 있습니다.
그러면 스프링 컨테이너까지 요청이 전달되기 전에 차단되므로 안정성을 더욱 높일 수 있습니다.
그리고 Filter는 ServletRequest/ServletResponse 객체를 조작할 수 있다는 점에서 Interceptor보다 훨씬 강력한 기술입니다.
즉 서블릿으로 가기전에 요청 객체를 조작해서 전달이 가능하고 클라이언트로 가기전에 응답을 조작해서 전달이 가능한 점이라 할 수 있습니다.
반면에 인터셉터는 필터로 부터 넘어온 요청을 받은 상태에서 인증이나 인가와 같이 작업을 할 수 있습니다.
이러한 작업들은 컨트롤러로 넘어가기 전에 검사해야 하므로 인터셉터가 처리하기에 적합합니다.
또한 인터셉터는 필터와 다르게 HttpServletRequest나 HttpServletResponse 등과 같은 객체를 제공받으므로 객체 자체를 조작할 수는 없습니다. 대신 컨트롤러로 넘겨주기 위한 정보를 가공하기에 용이합니다
개인적으로는 요청이 서블릿으로 넘어가기 전에 처리해야 할 요소가 있다면 필터에서 작업합니다.
일종의 프록시 역할을 한다고도 볼 수 있습니다
그리고 인터셉터는 이미 넘어온 요청에 대한 여러가지 선행작업이나 가공작업을 할 때 사용합니다.
계속 구현하시다 보면 언제 어디에서 두가지 기술을 구분해야 할 지 자연스럽게 알게 됩니다.




