inblog logo
|
송승현의 블로그
    스프링부트

    [스프링부트]필터, 인터셉터, AOP

    송송승현's avatar
    송송승현
    Nov 27, 2024
    [스프링부트]필터, 인터셉터, AOP
    Contents
    필터예제인터셉터예제AOP예제

    필터

    💡
    Servlet 기반 애플리케이션에서 http 요청과 응답을 가로채서 특정 작업을 수행하는데 사용
    웹 애플리케이션에 요청이 들어오기 전 또는 응답이 나가기 전에 처리
    FilterChain을 통해 다음 필터 혹은 서블릿으로 요청을 전달
    보통 URL을 대상으로 함

    예제

    import java.io.IOException; public class AuthenticationFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; HttpServletResponse resp = (HttpServletResponse) servletResponse; HttpSession session = req.getSession(); User sessionUser = (User) session.getAttribute("sessionUser"); if (sessionUser == null) { resp.sendRedirect("/login-form"); }else { filterChain.doFilter(servletRequest, servletResponse); } } } import com.metacoding.authblog._core.filter.AuthenticationFilter; import com.metacoding.authblog._core.filter.MerongFilter; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FilterConfig { @Bean // 빈으로 등록하면 리턴값이 IoC 등록 public FilterRegistrationBean addAuthFilter() { FilterRegistrationBean rg = new FilterRegistrationBean(); rg.setFilter(new AuthenticationFilter()); // 필터를 등록 rg.addUrlPatterns("/board/*"); // 필터를 실행할 uri 패턴 rg.addUrlPatterns("/user/*"); rg.setOrder(1); // filter의 실행 순서 return rg; } }
     

    인터셉터

    💡
    Spring MVC에서 제공하는 기능으로, Http 요청을 컨트롤러에 전달히가 전과 후에 특정 작업을 수행
    DispatcherServlet과 Controller 사이에서 동작
    필터보다 Spring 컨텍스트에 가까운 레벨에서 동작
    보통 Controller 및 handler를 대상으로 함

    예제

    public class LoggingInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { System.out.println("Before handling request: " + request.getRequestURI()); return true; // true면 다음 단계 진행 } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { System.out.println("After handling request: " + request.getRequestURI()); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { System.out.println("Request completed"); } } @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoggingInterceptor()).addPathPatterns("/**"); } }

    AOP

    💡
    특정 공텅 기능을 애플리케이션의 핵심 비즈니스 로직과 분리해 모듈화 한 것
    메서드 호출 전/후, 예외 발생 시점 등에 특정 작업을 수행
    주로 공통 관심사를 처리
    프록시 기반
    대상 코드에 변경을 가하지 않고 동작
    보통 메서드 및 클래스를 대상으로 함

    예제

    @Aspect @Component public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint) { System.out.println("Before method: " + joinPoint.getSignature().getName()); } @After("execution(* com.example.service.*.*(..))") public void logAfter(JoinPoint joinPoint) { System.out.println("After method: " + joinPoint.getSignature().getName()); } }
     
    Share article
    Contents
    필터예제인터셉터예제AOP예제

    송승현의 블로그

    RSS·Powered by Inblog