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)
필터와 인터셉터의 차이점