개발 공부
java servlet filter 본문
#Interceptor vs. Filter
interceptor - 모든 request에 (framework request handling)
filter - 지정한 url에 (모든 url을 설정할 수도 있음) (servlet API)
#Serlvet Filter의 흐름
#필터의 역할
필터 사용의 가장 큰 이득은 반복적인 작업을 재사용 가능한 단위로 캡슐화 할 수 있는 것입니다.
필터를 사용하여 다음과 같이 다양한 형태의 기능들을 수행할 수 있습니다.
- 사용자 정보를 근거로 요청 인증 및 요청 차단
- 웹 어플리케이션의 유저 작업 추적(로깅 및 감사)
- Data compression
- Localization
- XLST 를 사용하여 XML 데이터의 변형
- Encryption
- mime-type 변경
- Caching
#Filter API 구성
- javax.servlet.Filter Interface
filter 는 Filter 인터페이스를 구현하는 것으로서 정의됩니다. - javax.servlet.FilterChain Interface
filter chain 은 필터 통과 및 필터 시리즈를 호출하기 위한 수단을 제공합니다. - javax.servlet.FilterConfig Interface
filter config 는 초기화 데이터를 가지고 있습니다.
#Filter 인터페이스 (javax.servlet.Filter Interface)
public void init(FilterConfig filterConfig) throws ServletException;
필터를 웹 콘테이너내에 생성한 후 초기화할 때 호출한다.
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException;
체인을 따라 다음에 존재하는 필터로 이동한다. 체인의 가장 마지막에는 클라이언트가 요청한 최종 자원이 위치한다.
public void destroy();
필터가 웹 콘테이너에서 삭제될 때 호출된다.
#doFilter() 메서드 내에서 이루어지는 작업의 순서
서블릿 요청/응답 래퍼 클래스로서의 역할을 수행하기 위해서는 javax.servlet 패키지에 정의되어 있는 ServletRequestWrapper 클래스와 ServletResponseWrapper 클래스를 상속받으면 된다. 하지만, 대부분의 경우 HTTP 프로토콜에 대한 요청/응답을 필터링 하기 때문에 이 두 클래스를 상속받아 알맞게 구현한 HttpServletRequestWrapper 클래스와 HttpServletResponseWrapper 클래스를 상속받는 경우가 대부분일 것이다.
HttpServletRequestWrapper 클래스와 HttpServletResponseWrapper 클래스는 모두 javax.servlet.http 패키지에 정의되어 있으며, 이 두 클래스는 각각 HttpServletRequest 인터페이스와 HttpServletResponse 인터페이스에 정의되어 있는 모든 메소드를 이미 구현해 놓고 있다. 필터를 통해서 변경하고 싶은 정보가 있을 경우 그 정보를 추출하는 메소드를 알맞게 오버라이딩하여 필터의 doFilter() 메소드에 넘겨주기만 하면 된다. 예를 들어, 클라이언트가 전송한 "company" 파리머터의 값을 무조건 "JavaCan.com"으로 변경하는 요청 래퍼 클래스는 다음과 같이 HttpServletRequestWrapper 클래스를 상속받은 후에 getParameter() 메소드를 알맞게 구현하면 된다.
#출처:
http://devbox.tistory.com/entry/Servlet-서블릿-필터와-이벤트-1 [장인개발자를 꿈꾸는 :: 기록하는 공간]
http://stevenjsmin.tistory.com/8 [Steven J.S Min's Blog]
'웹개발 (자바, 스프링, React) > 자바 개념' 카테고리의 다른 글
자바EE, Spring (0) | 2020.06.18 |
---|---|
애플릿, NPAPI (플러그인, 넷스케이프, 모질라) (0) | 2020.06.18 |
자바 기본 reachable and unreachable object (0) | 2018.06.21 |
자바 연습문제 1번. JVM - Heap Memory (0) | 2018.06.21 |
자바의 정석 1,2 챕터 연습문제 (0) | 2018.06.21 |