스프링 필터 vs 인터셉터

2024. 5. 14. 16:22카테고리 없음

필터

 

[Spring Boot] 스프링 부트 필터 적용 (Filter)

목차 1. 필터를 왜 쓰나요? 결론부터 말하면 공통부분을 따로 작성하여 중복 소스를 줄이고 소스 관리도 쉬워져 유지보수에 좋습니다. Spring (자바) 개발을 하다 보면 공통적으로 처리해야 할 부

veneas.tistory.com

 

 

spring - 스프링에서의 필터 개념 및 예제

블로그에서 사용한 소스코드는 https://github.com/97e57e/BLOG 에서 보실 수 있습니다. Filter 란? 사실 필터는 스프링의 독자적인 기능이 아닌 자바 서블릿에서 제공하는 기능입니다. 스프링 프레임워크

gardeny.tistory.com

 

 

 

필터 적용시키기

1. Filter를 implements하는 필터 클래스를 구현

2. FilterRegistrationBean에 필터를 넣어 생성

3. FilterRegistrationBean에 필터링할 URL 패턴 혹은 순서를 set한다.

 

필터 인터페이스는 3가지 메소드를 정의한다.

1. init

2. doFilter

3. destroy

 

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException{
	//todo
    filterChain.doFilter(servletRequest, servletResponse);
}

해당 부분이 매우 중요한데

filterChain.doFilter를 통해 다음 필터, 혹은 컨트롤러의 메소드로 이동한다.

이때 request와 response를 넘겨줘야한다.

request 헤더에 토큰을 추가하거나 body로 온 이미지를 압축하여 다시 넣어주는 등의 로직을 할 수 있다.

또 dofilter가 끝난 후 response를 조작할 수도 있다.

 

여러 필터가 동작 과정

필터 1 시작 -> 필터 2 시작 -> 컨트롤러 동작 -> 필터2 끝 -> 필터 1 끝

 

동작과정을 생각하며 request와 response를 제어하자.

 

필터 종류

 

Spring boot Filter

일하면서 filter를 쓰게 되었는데 구글링하면서 급하게 쓰게 되니 개념들이 흩어져 있는 것 같아서 이 기회...

blog.naver.com

 

OncePerRequestFilter로 요청을 한번만 처리하는게 어떠한 의미인지 위의 포스팅에 적절한 예시가 나와있다.

 

필터의 예외처리

필터는 디스패처 서블릿 전에 동작하는데 @ControllerAdvice, @ExceptionHandler 는 이를 잡아내지 못한다.

 

[Spring Security] Filter 예외처리는 어떻게 할까?

🔐 Spring Security 를 이용해서 토큰을 검증하고 인증된 사용자 정보를 담은 객체를 생성했다. 이 과정에서 토큰이 유효하지 않은 경우, 예외처리를 하려고 한다. 예외처리를 어떻게 할 수 있는지

velog.io

따라서 필터 내부에서 예외처리를 해야한다.

 

인터셉터

 

[Spring] 스프링 인터셉터(Interceptor)

스프링 인터셉터(Interceptor)란? interceptor는 위 처럼 가로챈다는 뜻을 갖습니다. 즉, 스프링 interceptor란 요청을 가로채서 개발자가 원하는 동작을 추가하는 역할을 합니다. 왜 interceptor를 사용해야

hstory0208.tistory.com

 

 

 

 

 

[Spring] 필터(Filter) vs 인터셉터(Interceptor) 차이 및 용도 - (1)

Spring은 공통적으로 여러 작업을 처리함으로써 중복된 코드를 제거할 수 있도록 많은 기능들을 지원하고 있다. 이번에는 그 중에서 필터(Filter) vs 인터셉터(Interceptor)의 차이에 대해 알아보고자

mangkyu.tistory.com

 

인터셉터 적용시키기

1. HandlerInterceptor를 implements하는 인터셉터 클래스를 구현

2. InterceptorRegistry에 커스텀 인터셉터를 넣어 생성

3.  InterceptorRegistry에 필터링할 URL 패턴 혹은 순서를 set한다.

 

인터셉터같은 경우 fillterChain.doFillter로 다음 필터 혹은 컨트롤러로 넘어간 필터와 다르게 override한 함수의 반환값을 통해

순서를 제어한다.

true인 경우 다음 인터셉터 혹은 컨트롤러를 실행한다.

 

여기서 중요한점이 HttpServletRequest에서 body는 한번 읽으면 뒤에 읽을 수 없다. 레퍼나 여러 방식을 이용해 수정할 수 있다. 하지만

직접적인 수정은 뒤에 예기치않은 결과를 만들 수 있다.

 

 

HttpServletRequest 참고

 

[spring] 서블릿 컨테이너와 HttpServletRequest, HttpServletResponse 활용 방법

📖 ✏️ 서블릿 컨테이너의 역할과 HttpServletRequest, HttpServletResponse를 사용하여 HTTP 요청/응답 메시지를 사용하는 기본적인 방법을 학습하고 정리한 포스팅입니다.

velog.io