서블릿 필터와 래퍼 동작 구조
01. 서블릿 필터
Filter
- Servlet 이나 요청하는 자원 앞에 위치하면서 , 요청이나 응답을 가로채서 데이터를 변경하거나 특정 기능을 수행할 수 있게 해주는 객체이다.
- 주로 암/복호화, 인코딩 작업 등을 할 때 사용한다.
- javax.servlet.Filter 인터페이스를 상속 받아서 구현한다.
- 요청을 필터로 보내서 필요한 작업을 수행한다. 데이터를 가공하거나, 잘못된 요청은 서블릿으로 전달하지 않거나 한다.
- 가공된 데이터를 서블릿 객체로 전달되면 작업을 수행하고 다시 필터로 받아서 응답에 대해서도 처리해야 할 작업이 있으면 해주고 나서 사용자에게 응답하게 된다.
- Request는 보안 관련, 요청 헤더와 바디 형식 지정, 요청에 대한 log 기록 유지
- Response : 응답 스트림 압축, 응답 스트림 내용 추가 및 수정, 새로운 응답 작성 등 처리
Wrapper
- Request나 Response 객체는 한 번 생성되면 임의로 데이터를 변경할 수가 없다. 이 것을 상황에 따라 데이터를 변경해야 하는 경우라면 Wrapper로 Request 객체를 한 번 감싸서 데이터를 가공하는 역할을 한다.
Filter Interface
init(FilterConfig config)
필터 객체를 생성하며 초기화 한다.
doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
필터 안에서 처리해야 하는 내용을 구현하는 것
필터 수행 시 사용하는 메소드
요청 객체와 응답 객체를 사용해 작업을 수행한 후, chain을 통해 가공된 값을 목적지로 전송
destroy()
역할이 끝난 필터는 해당 메소드를 호출하며 소멸한다.
interface FilterChain
- 필터는 chain처럼 서로 연결되어 있는데 연결되어 있는 필터를 순차적으로 doFilter() 메소드로 실행시키는 인터페이스이다.
- 마지막 필터가 실행된 후, service() 메소드를 실행하여 서블릿의 메소드의 doGet(), doPost()를 실행한다.
02. 서블릿 래퍼
- 필터 클래스로부터 전달받은 데이터를 다시 가공하여 필터에게 반환하는 클래스
- request, response의 데이터는 함부로 변조할 수 없다. 그러나 필요에 의해서 가공해야 되는 일이 생길 때, 직접 수정하는 것이 아니라 Wrapper로 한 번 감싼 후, 수정하게 된다.
- 데이터 가공이 필요한 시점일 경우 요청 객체에 대한 가공이라면 HttpServletRequestWrapper 클래스를 통해 구현하고, 응답 객체라면 HttpServletResponseWrapper 클래스를 통해서 구현한다.
- 원본 데이터는 수정되지 않는다.
'Programming > Servlet' 카테고리의 다른 글
DAY 106. Servlet - 사용자 데이터 전송 방식 (0) | 2021.12.02 |
---|---|
DAY 105. Servlet - 기본 개념 (0) | 2021.12.01 |
DAY 104. Servlet에 앞서 (Web Server VS WAS) (0) | 2021.12.01 |