SpringBoot - Filter(필터)

HyeonWoo·2020년 12월 21일
0

스프링 & JPA

목록 보기
15/34
post-thumbnail

프로젝트를 진행하면서 인가에 대한 처리를 필터로 사용했었는데, 이번장에서는
스프링부트의 필터와 필터의 동작 방법, 인터셉터와이 차이, 필터를 등록하는 방법에 대해 알아 보고자 한다


필터란?

HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 코드이며, 필터는 객체의 형태로 존재하며 클라이언트로부터 오는 요청(request)과 최종자원(서블릿/JSP/기타 문서)사이에 위치하며 클라이언트의 요청 정보를 알맞게 변경할수 있고, 최종 자원과 클라이언트로 가는 응답(response) 사이에 위치하여 최종 자원의 요청 결과를 알맞게 변경할 수 있다.


필터의 구조

위 사진에서 아래와 같은 특징들을 볼 수 있다.

  • 자원이 받게되는 요청 정보는 클라이언트와 자원 사이에 존재하며 필터에 의해 요청정보가 변경 될 수 있다.
  • 클라이언트가 보게 되는 응답 정보는 클라이언트와 자원사이에 존재하는 필터에 의해 변경된 응답 정보가 된다.
  • 클라이언트와 자원사이에는 여러개의 필터가 모여서 하나의 체인을 형성할 수 있다.
  • 필터는 클아이언트의 요청을 필터체인의 다음단계에 보내는 것이 아니라 , 다른 자원의 결과를 클라이언트에 전송할 수 있다. 이 필터의 기능을 활용하여 사용자 인증이나 권한 체크에 사용 될 수 있다.

필터와 인터셉터의 차이


필터는 DispatcherServlet 앞에서 먼저 동작하고, 인터셉터는 DispatcherServlet에서 Controller(Handler) 사이에서 동작한다.

필터

  • 웹 어플리케이션의 Context의 기능
  • 스프링 기능을 활용하기에 어려움
  • 일반적으로 인코딩, CORS, XSS, LOG, 인증, 권한 등을 구현

인터셉터

  • 스프링의 Spring Context의 기능이며 일종의 빈
  • 스프링 컨테이너이기에 다른 빈을 주입하여 활용성이 좋음
  • 다른 빈을 활용 가능하기에 인증, 권한 등을 구현함.

스프링부트에서 필터 설정

스프링에서는 웹 어플리케이션 컨텍스트를 설정할 수 있는 web.xml 파일을 통한 필터를 설정한다. 하지만 스프링 부트에서는 web.xml 파일이 없어지고, 프로그래밍 방식으로 설정할 수 있는데 2가지 방법이 존재한다.

방법1) FilterRegistrationBean으로 필터 등록

자바 프로그래밍 방식으로 FilterRegistrationBean을 이용해서 필터로 등록한 후에 WebMvcConfigurer을 상속 받아 설정 후 빈으로 등록하는 방식

방법2) @WebFilter 어노테이션 필터 등록

내장 컨테이너를 사용하는 스프링부트에서 지원하는 어노테이션인 @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/

profile
학습 정리, 자기 개발을 위한 블로그

0개의 댓글