Spring Framework/끄적끄적

[Spring] 스프링에서의 필터 개념및 예제

포포015 2021. 6. 19. 23:03

Filter란?

 

필터는 스프링의 독자적인 기능이 아닌 자바 서블릿에서 제공하는 기능이다.

스프링 프레임워크에서 필터로 인증등 다양한 작업을 하는데 최근 xss 공격방어를 하며 필터를 사용해봣기에

공부겸 블로그에 작성해보겠다

(출처:https://justforchangesake.wordpress.com/2014/05/07/spring-mvc-request-life-cycle/)

위 그림은 스프링 필터와 연관지어 검색하면 많이 보이는 그림중 하나이다.

스프링 프레임워크에서 요청에 대한 라이프 사이클을 나타낸그림이다.

 

스프링 프레임워크는 들어온 요청이 DispatcherServlet에 의해 컨트롤러에 매핑이된다.

 

Filter는 요청이 DispatcherServlet에 의해 다뤄지기 전,후에 동작한다.

또한 Filter는 FilterChain(필터 체인)을 통해 여러 필터가 연쇄적으로 동작하게 할수 있다.

 

그럼 Filter는 어디에 쓰이나?

필터는 주로 요청에 대한 인증,권한 체크등을 하는데에 쓰인다.

구체적으로 들어온 요청이 DispatcherServlet에 전달되기 전에 헤더를 검사해 인증토큰이 있는지 없는지,

올바른지 올바르지않은지 검사할수 있다.

 

Filter, 어떻게 사용하나?

그럼 이제 스프링에서 필터를 어떻게 사용하는지 알아보겠다.

 

먼저 필터 클래스를 만들어야 하는데, 필터 클래스는 servlet의 Filter 인터페이스를 구현하여 만들수 있다.

 

1
public class FirstFilter implements Filter {}
cs

필터 인터페이스를 3가지 메소드를 갖고 있는데 각각 다음과 같다.

1) init(): 필터가 생성될때 수행되는 메소드

2) doFilter(): Request,Response가 필터를 거칠때 수행되는메소드

3) destroy(): 필터가 소멸될때 수행되는메소드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class FirstFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("FirstFilter가 생성 됩니다.");
    }
 
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        log.info("==========First 필터 시작!==========");
        filterChain.doFilter(servletRequest, servletResponse);
        log.info("==========First 필터 종료!==========");
    }
 
    @Override
    public void destroy() {
        log.info("FirstFilter가 사라집니다.");
    }
}
cs

 

이렇게 필터 클래스를 작성하고나선 web.xml에 이 필터를 Spring bean으로 등록해서 사용해야한다.