프로젝트를 진행하면서 인가에 대한 처리를 필터로 사용했었는데, 이번장에서는
스프링부트의 필터와 필터의 동작 방법, 인터셉터와이 차이, 필터를 등록하는 방법에 대해 알아 보고자 한다
HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 코드이며, 필터는 객체의 형태로 존재하며 클라이언트로부터 오는 요청(request)과 최종자원(서블릿/JSP/기타 문서)사이에 위치하며 클라이언트의 요청 정보를 알맞게 변경할수 있고, 최종 자원과 클라이언트로 가는 응답(response) 사이에 위치하여 최종 자원의 요청 결과를 알맞게 변경할 수 있다.
위 사진에서 아래와 같은 특징들을 볼 수 있다.
필터는 DispatcherServlet 앞에서 먼저 동작하고, 인터셉터는 DispatcherServlet에서 Controller(Handler) 사이에서 동작한다.
스프링에서는 웹 어플리케이션 컨텍스트를 설정할 수 있는 web.xml 파일을 통한 필터를 설정한다. 하지만 스프링 부트에서는 web.xml 파일이 없어지고, 프로그래밍 방식으로 설정할 수 있는데 2가지 방법이 존재한다.
자바 프로그래밍 방식으로 FilterRegistrationBean을 이용해서 필터로 등록한 후에 WebMvcConfigurer을 상속 받아 설정 후 빈으로 등록하는 방식
내장 컨테이너를 사용하는 스프링부트에서 지원하는 어노테이션인 @WebServlet, @WebFilter 및 @WebListener 선언해서 자동 등록 후 @ServletComponentScan로 이용하는 방식
참고자료
https://twofootdog.github.io/Spring-%ED%95%84%ED%84%B0(Filter)%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80/,
https://linked2ev.github.io/gitlog/2019/09/15/springboot-mvc-13-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-MVC-Filter-%EC%84%A4%EC%A0%95/