[spring]Filter, Interceptor, AOP

정예은·2020년 1월 21일
0

web

목록 보기
25/27

Filter, Interceptor, AOP 공통점

모두 무슨 행동을 하기전에 먼저 실행하거나, 실행한 후에 추가적인 행동을 할 때 사용되는 기능

Filter

요청과 응답을 거른뒤 정제하는 역할
스프링 context 외부에 존재, 스크링과 무관한 자원 동작

서블릿 필터: DispatcherServlet 이전에 실행
필터가 동작하도록 지정된 자원의 앞단에서 요청내용 변경 및 여러 검사를 수행
자원의 처리가 끝난 후 응답내용에 따라 변경하는 처리 가능
보통 web.xml에 등록
인코딩 변환 처리,XSS방어 등의 요청에 대한 처리로 사용

ex)

<!-- 한글 처리를 위한 인코딩 필터 -->

<filter>
    <filter-name>encoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

URL-PATTERN이 /*이면 servlet, jsp 뿐 아니라 모든 자원의 요청에서 호출됨

method

init() - 필터 인스턴스 초기화
doFilter() - 전/후 처리
destroy() - 필터 인스턴스 종료

Interceptor

요청에 대한 작업 전/후로 가로챔

스프링의 DistpatcherServlet이 컨트롤러를 호출하기 전,후로 끼어듦
-> 스프링 context 내부에서 Controller에 관한 요청과 응답에 대해 처리

로그인 처리에 이용

메서드

preHandler() - 컨트롤러 메서드가 실행되기 전
postHanler() - 컨트롤러 메서드 실행직 후 view페이지 렌더링 되기 전
afterCompletion() - view페이지가 렌더링 되고 난 후

AOP

OOP를 보완하기 위해 나온 개념
객체 지향 프로그래밍으로 중복을 줄일 수 없는 부분을 줄이기 위해 관점에서 바라보고 처리하는 개념
'로깅', '트랜잭션', '에러 처리'등 비즈니스단의 메서드에서 조금 더 세밀하게 조정하고 싶을 때 사용
Interceptor나 Filter와는 달리 메소드 전후의 지점에 자유롭게 설정이 가능
Interceptor와 Filter는 주소로 대상을 구분하지만 AOP는 주소,파라미터,애노테이션 등 다양한 방법으로 대상 지정 가능

Advic(AOP)와 HandlerInterceptor(Interceptor)의 가장 큰 차이는 파라미터의 차이
Advice: JoinPoint나 ProceedingJoinPoint 등을 활용해서 호출
HandlerInterceptor: Filter와 유사하게 HttpServletRequest, HttpServletResponse를 파라미터로 사용

AOP의 포인트컷

@Before: 대상 메서드의 수행 전
@After: 대상 메서드의 수행 후
@After-returning: 대상 메서드의 정상적인 수행 후
@After-throwing: 예외발생 후
@Around: 대상 메서드의 수행 전/후

0개의 댓글