[Spring in Action] Spring Filter & Interceptor & AOP

728x90
반응형
SMALL

Spring in Action (5판)

  • 스프링 5의 강력한 기능과 생산성을 활용한 웹 애플리케이션 개발
  • Walls, Craig 지음
  • 제어펍 출판사
  • 2020.05.14

 

스프링 인 액션 개인 스터디 내용을 정리하자.

 

 

 

 

Filter & Interceptor & AOP

공통적으로 처리해야 할 업무(로그인 관련 세션 & 권한, XSS 방어, Platform 분기, Log, 인코딩 등)를 별도 관리하는 역할이다.

 

공통 업무를 프로그램 흐름의 앞, 중간, 뒤에 추가하여 자동으로 처리해준다.

 

출처 : https://blog.naver.com/platinasnow/220035316135

Filter와 Interceptor는 Servlet 단위에서 실행되고, AOP는 메서드 앞에서 Proxy 패턴의 형태로 실행된다.

 

Request -> Filter -> Interceptor -> AOP -> Interceptor -> Filter -> Response

 

  Filter Interpceptor AOP
실행 위치  Servlet Servlet Method
실행 메서드  init
dofilter
destroy
preHandler
postHandler
afterCompletion
Poincut으로
@after, @before, @around 등
위치를 지정하여 자유롭게
메서드 생성 가능
Spring MVC Request Life Cycle

출처 : https://justforchangesake.wordpress.com/2014/05/07/spring-mvc-request-life-cycle/

 

Filter

Servlet Container에 의해 동작, 제어되는 클래스로 HTTP Request가 Servlet에 도착하기 전에, HTTP Response가 Client에 도착하기 전에 제어할 수 있다.

 

Request 시, DispatcherServlet이 작업을 처리하기 전에 동작한다.

 

Response 시, DispatcherServlet 작업이 끝난 이후에 동작한다.

 

Filter는 Filter Chain을 갖고 있으며, Application Context에 등록된 Filter들이 WAS 구동 시 Context Layer에 설정된 순서대로 Filter Chain을 구성한다.

 

구성된 Chain은 맨 처음 인스턴스 초기화 init을 거친 후 각 Filterdptj doFiler를 통해 필터링 작업을 진행하고 Destroy 된다.

 

@Slf4j
@RequiredArgsConstructor
public class SampleFilter extends OncePerRequestFilter {
 
    private static final List<String> EXCLUDE_PATHS = newArrayList("/lbStatusCheck", "/hello");
 
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { 
        if (!EXCLUDE_PATHS.contains(request.getRequestURI())) {
            ...
            // Header Set, Logging 등 필요 작업 수행
            ...
        }
 
        filterChain.doFilter(request, response);
    }
}

 

Interceptor

Filter와 다르게 Spring 레벨에서 지원하는 Servlet Filter이다. Spring Bean의 모든 객체에 접근할 수 있다.

 

Spring Context 내에서 HTTP Request와 HTTP Response 처리에 대한 강력한 기능을 제공한다.

 

Java Servlet 레벨에서 동작하는 Filter와 다르게 Spring Context 레벨에서 동작하므로 DispatcherServlet이 Request 및 Response를 처리하는 시점에 Interceptor Handler가 동작한다.

 

DispatcherServlet에서 요청이 처리되고 나면 요청받은 URL에 등록된 Interceptor가 호출된다.

 

preHandle -> postHandle -> afterCompletion 순으로 처리된다.

 
@Slf4j
@Component
@RequiredArgsConstructor
public class SampleMvcInterceptor extends HandlerInterceptorAdapter {
 
    private final SampleMvcProvider sampleMvcProvider;
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String sampleHeader = request.getHeader(SAMPLE_INTERNAL_HEADER_NAME);
        if (isNotEmpty(sampleHeader)) {
            log.info("SampleMvcInterceptor.preHandle() - SAMPLE_INTERNAL_HEADER_NAME: {}", abTestHeader);
            sampleMvcProvider.sampleParse(sampleHeader);
        }
        return true;
    }
}

 

AOP

관점 지향 프로그래밍, 즉 어떤 로직을 기준으로 핵심적인 관점과 부가적인 관점으로 나누어 보고 그 관점을 기준으로 모듈화 하는 것이다.

hoooon-s.tistory.com/54?category=961471

 

[Spring in Action] Spring AOP & AspectJ

Spring in Action (5판) 스프링 5의 강력한 기능과 생산성을 활용한 웹 애플리케이션 개발 Walls, Craig 지음 제어펍 출판사 2020.05.14 스프링 인 액션 개인 스터디 내용을 정리하자. AOP Aspect Oriented Progr..

hoooon-s.tistory.com

 

728x90
반응형
LIST