본문 바로가기
study/TIP

JAVA Spring / INTERCEPTOR / FILTER

by 휘루걸음 2024. 1. 5.
728x90
반응형

Spring Interceptor

Spring Interceptor는 Spring Framework에서 제공하는 기능 중 하나입니다. Interceptor는 클라이언트의 요청과 컨트롤러 사이에서 동작하며, 요청을 가로채거나 처리하기 전후에 추가적인 로직을 수행할 수 있습니다.

Spring Interceptor를 사용하는 것은 다음과 같은 이유로 유용합니다:

  1. 인증 및 권한 부여: 특정 요청에 대한 인증이나 권한을 확인하여 접근을 제어할 수 있습니다.
  2. 로깅 및 모니터링: 클라이언트의 요청과 응답을 기록하고 분석하여 로깅이나 모니터링 작업을 수행할 수 있습니다.
  3. 캐싱 및 리소스 관리: 요청된 데이터를 캐싱하거나 리소스를 관리하는 작업을 수행할 수 있습니다.
  4. 예외 처리: 예외 상황에 대한 처리를 추가하거나 예외를 가로채는 작업을 수행할 수 있습니다.
반응형

Spring에서 Interceptor를 사용하기 위해서는 HandlerInterceptor 인터페이스를 구현하고, 해당 인터페이스의 메서드를 재정의하여 원하는 작업을 구현해야 합니다. 일반적으로 preHandle, postHandle, afterCompletion과 같은 메서드가 구현되며, 각각 요청 처리 전, 후, 완료 후에 실행됩니다.

또한, Interceptor를 등록하려면 Spring의 설정 파일에서 addInterceptor 메서드를 이용하여 InterceptorRegistry에 등록해야 합니다.

 
728x90

JAVA 설정 예제

1. Interceptor 클래스 구현

public class CustomInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // preHandle 로직
        return true; // 또는 false - false인 경우 Controller를 실행하지 않음
    }

    // postHandle, afterCompletion 등 다른 메서드들도 구현 가능
}

 

위 예제에서 CustomInterceptor는 실제로 구현된 Interceptor 클래스를 의미하며, addPathPatterns를 사용하여 어떤 URL 패턴에 Interceptor를 적용할 지 설정할 수 있습니다.

Spring Interceptor를 사용하면 애플리케이션의 다양한 측면에서 공통된 작업을 쉽게 처리할 수 있습니다.

 

2. Interceptor를 등록하는 Configuration 클래스

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new CustomInterceptor()).addPathPatterns("/**");
    }
}

 

 

JAVA 설정 예제

1. Interceptor 클래스 구현

위 Java 기반 설정 예제의 CustomInterceptor 클래스와 동일합니다.

2. Spring 설정 파일 (예: applicationContext.xml)

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="com.example.interceptors.CustomInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

 

<mvc:mapping> 요소를 사용하여 Interceptor를 어떤 URL 패턴에 적용할지 지정합니다.

이러한 방법을 사용하면 Spring Interceptor를 Java 및 XML 설정으로 구현할 수 있습니다. 이뿐만 아니라 각 메서드의 사용 사례에 따라 로깅, 권한 부여, 예외 처리 등 다양한 기능을 구현할 수 있습니다.


FILTER

public class CustomFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 요청 전후의 작업 수행
        chain.doFilter(request, response);
    }
    
    // init(), destroy() 등의 다른 메서드들도 구현 가능
}

@WebFilter("/*")
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 요청 전후의 작업 수행
        chain.doFilter(request, response);
    }
}

 

Spring에서 Interceptor와 Filter는 서로 다른 기능을 수행하는 것에 유의해야 합니다. Interceptor는 Spring MVC 내에서 컨트롤러로 요청이 전달되기 전 후에 작업을 수행하는 데 사용되는 반면, Filter는 Java Servlet Specification에 의해 제공되며, 요청 및 응답을 가로채고 수정할 수 있는 일반적인 목적의 기능입니다.

 

 

Interceptor는 Spring의 컨트롤러 계층에서 작동하며, 주로 MVC 컨텍스트 내에서 작업을 수행합니다. Filter는 Java Servlet 스펙에 의해 제공되며, 모든 요청과 응답에 대해 작동하며, Spring의 컨텍스트 외부에서 작동합니다.

따라서 프로젝트의 요구사항 및 목적에 따라 올바른 도구를 선택하는 것이 중요합니다. Interceptor는 주로 Spring MVC에서 특정한 작업을 수행할 때 사용되며, Filter는 Java Servlet에서 모든 요청에 대한 전체적인 필터링이 필요할 때 사용됩니다.

 

 

참고링크 :  https://mangkyu.tistory.com/173

 

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

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

mangkyu.tistory.com

 

728x90
반응형