Filter & Interceptor

miscaminos·2021년 4월 1일
0

Server & Web

목록 보기
19/23

Filter

Filter는 JSP & JavaBean을 사용하는 model이나, MVC model에서 두가지 패턴에서 모두 사용될 수 있다.

Filter가 사용되는 case를 예를 들자면, 사용자가 관리자권한이 필요한 특정 요청을 보냈을때에, 사용자의 권한을 확인해서 관리자 권한이 없는경우 (사용자의 등급과 같은 member 테이블의 속성으로 판단해서) 사용자의 요청을 처리하기전에 관리자 권한을 확보할 수 있도록 로그인 페이지로 이동시킬때 filter가 사용될 수 있다.

Filter는 요청과 응답을 필터링 해서 정제하는 역할을 한다. Filter는 spring context 외부에 존재하여 spring과는 무관한 자원에 대해 동작한다.

그래서 filter는 web.xml에서 설정되고, (servlet-context.xml에서 설정되지않기때문에) Dispatcher Servlet 전에 있는 영역으로 존재한다.

Filter가 Dispatcher Servlet이전에 실행되면서 filter가 동작하도록 지정된 자원의 앞단에서 요청내용을 변경하거나, 필요한 체크를 수행할 수 있다.
그리고 자원처리가 끝난 후, 응답내용에 대해서도 변경하는 처리를 할 수 있다.

앞에서 든 예와 같이 filter는 일반적으로 인코딩 변환 처리, 로그인처리, 권한체크 등을의 역할을 수행 한다. Spring_webtest project를 생성해서 처음 spring framework을 사용한 webb application 실습을 진행했을때, web.xml에 root-context.xml과 servlet-context.xml 지정외에 한글처리를 위해 encoding UTF-8 파라미터를 가진 filter를 추가했었다.

Filter methods:

ㆍinit() - 필터 인스턴스 초기화

ㆍdoFilter() - 전/후 처리

ㆍdestroy() - 필터 인스턴스 종료

Interceptor

Spring MVC 패턴내에서는 filter대신 interceptor를 사용해서 요청 및 응답처리 전/후로 필요한 action을 수행할 수 있다. 그 외에도 권한체크, 프로그램 실행시간 계산작업 로그확인 등의 업무처리 등을 할 수 있다.

인터셉터는 스프링의 DistpatcherServlet이 컨트롤러를 호출하기 전, 후로 끼어들기 때문에 스프링 컨텍스트(Context, 영역) 내부에서 Controller(Handler)에 관한 요청과 응답에 대해 처리한다.

Interceptor methods:

preHandler() - 컨트롤러 메서드가 실행되기 전

postHanler() - 컨트롤러 메서드 실행된 후 view페이지 렌더링 되기 전

afterCompletion() - view페이지가 렌더링 되고 난 후

AOP의 흐름

공통업무에 관련된 코드를 모든 페이지 마다 작성 해야 한다면 중복된 코드가 많아지게 되고 프로젝트 단위가 커질수록 서버에 부하를 줄 수도있으며, 소스 관리도 되지 않는다. 즉, (cross-cutting concerns)공통 부분은 빼서 따로 관리하는게 좋다. 이러한 공통업무를 프로그램 흐름의 앞, 중간, 뒤에 추가하여 자동으로 처리 할 수 있다.

아래 그림과 같이 filter, interceptor, AOP를 사용해서 공통업무를 처리를 흐름을 구현한것이다.

Reference
관리자 인증의 구현 , Interceptor from lectureblue

profile
Learning to code and analyze data

0개의 댓글