스프링 부트(Spring Boot) - Filter, Interceptor

2경빈·2024년 6월 25일

Spring Boot

목록 보기
13/19

Filter

스프링 부트에서 필터는 요청과 응답을 가로채고 추가 처리를 수행하는 데 사용된다.
javax.servlet.Filter 인터페이스를 구현하여 필터를 정의할 수 있다.
필터는 서블릿 컨텍스트에서 작동하며, 주로 요청과 응답을 가로채는 데 사용된다.

  • init : 필터가 초기화될 때 호출, 필터가 실행되기 전에 필요한 리소스를 초기화하는 데 사용된다.
  • doFilter : 실제 필터링 작업이 수행되는 메서드, 요청(request)와 응답(response)에 대한 필터링 작업을 수행한다.
  • destroy : 필터가 소멸될 때 호출된다. 필터가 사용한 리소스를 해제하거나 정리하는 데 사용된다.

필터 구현

코드

//AdminFilter
public class AdminFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("KhFilter.init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("AdminFilter.doFilter start");
        HttpSession session = ((HttpServletRequest)servletRequest).getSession();
        Object LoginAdminVo = session.getAttribute("loginAdminVo");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("AdminFilter.doFilter end");
    }

    @Override
    public void destroy() {
        System.out.println("KhFilter.destroy");
    }
}

필터 등록

FilterRegistrationBean : 스프링 부트에서 필터를 등록할 때 사용하는 클래스. 필터의 순서 및 URL 패턴 등을 설정할 수 있다.

코드

//FilterConfig
@Configuration
//설정을 위한 파일로 알기위하여
public class FilterConfig {
    @Bean
    public FilterRegistrationBean m01(){
        AdminFilter khf =new AdminFilter();
        FilterRegistrationBean x =new ㄹ<>(khf);
        x.addUrlPatterns("/*");
        x.setOrder(2);
        return x;
    }
    @Bean
    public FilterRegistrationBean m02(){
        AdminFilter khf =new AdminFilter();
        FilterRegistrationBean x   =new FilterRegistrationBean<>(new AdminFilter());
        x.addUrlPatterns("/*");
        x.setOrder(1);
        return x;
    }
}

Ex)

Interceptor

인터셉터(Interceptor)는 스프링 프레임워크에서 제공하는 기능으로, 요청(request)이 컨트롤러에 도달하기 전에, 또는 응답(response)이 클라이언트에게 반환되기 전에 특정 로직을 실행할 수 있도록 한다. 인터셉터는 주로 로깅, 인증 및 권한 부여, 공통 데이터의 처리 등 다양한 용도로 사용된다.

  • preHandle : 메서드는 컨트롤러 실행 전에 호출된다. 주로 요청을 가로채어 특정 조건을 확인하거나 초기화 작업을 수행하는 데 사용된다. 여기에서 반환값이 true이면 요청이 계속 진행되며, false이면 요청이 중단된다.
  • postHandle : 메서드는 컨트롤러가 요청을 처리한 후, 뷰가 렌더링되기 전에 호출된다. 컨트롤러가 반환한 모델과 뷰 객체를 수정할 수 있다.
  • afterCompletion : 메서드는 뷰가 렌더링된 후 호출된다. 요청 처리 완료 후 정리 작업을 수행할 수 있다.

인터셉터 정의

코드

public class KhInterceptor implements HandlerInterceptor {

    //핸들러 가기 전
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("KhInterceptor.preHandle");
        System.out.println("handler = " + handler);
        return true;
    }

    //핸들러 이후
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("KhInterceptor.postHandle");
        Thread.sleep(3000);
        System.out.println("modelAndView = " + modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("KhInterceptor.afterCompletion");
        Thread.sleep(3000);
        System.out.println("ex = " + ex);
    }
    // view 처리 이후
}

인터셉터 등록

코드

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry
                .addInterceptor(new KhInterceptor()).
                addPathPatterns("/**");
    }
}

Ex)


필터와 인터셉터의 차이점

profile
eggs before hatching

0개의 댓글