티스토리 뷰

donaricano-btn
반응형

필터는 서블릿과 비슷한 자바 컴포넌트 입니다. 컨테이너에 전달된 요청이 서블릿을 호출하기 전에 이 필터를 거치게 됩니다.


실제로 필터를 구현한 클래스 입니다. filter 인터페이스를 구현했습니다. 이 때 init 메소드를 반드시 구현해야 합니다. 일반적으로는 config 객체를 저장합니다. 그리고 doFilter에서 실제로 필요한 코딩을 하게 됩니다. 마지막에 FilterChain 객체의 doFilter() 메소드를 호출하는데 이 부분이 다음에 실행될 필터 또는 서블릿을 호출하는 부분입니다.


배포서술자에 필터를 정으하고 매핑할 수 있습니다. 서블릿처럼 이름과 클래스 위치로 필터를 정의하고 초기화 파라미터도 지정할 수 있습니다. 필터를 url이나 servlet에 매핑시키면 해당하는 요청이 들어왔을 때 필터를 거치게 됩니다.


필터에서 서블릿의 service 메소드를 호출할 때 request, response 객체를 인자로 넘겨주게 됩니다. 알다시피 servlet의 response 객체는 OuputStreamWriter 객체를 참조하고 있고 servlet 에서는 이 객체를 통해 직접 응답을 클라이언트로 전달합니다. 문제는 필터에서 응답, 즉 response 객체에 접근하고 싶을 때 발생합니다. service 메소드가 종료된 시점에서 이미 response 가 클라이언트로 전달 된 다음이기 때문에 필터에서는 response 객체에 접근할 수가 없습니다. 이 때 사용하는 것이 바로 wrapper 클래스 입니다. 필터에서 wrapper 클래스를 만들어 진짜 response객체 대신 래퍼객체를 보내는 것입니다. 그렇게 되면 servlet에서는 실제 outputstream이 아닌 래퍼의 outputstream에 응답을 작성하게 되고 필터에서 이 응답에 접근할 수 있게 됩니다.


쿠키값을 다 소문자로 바꾸는 래퍼를 만들어 보겠습니다. responsewrapper 클래스를 확장하여  필요한 메서드만 재정의 한 것을 볼 수 있습니다. 생성자를 보면 response 객체를 파라미터로 받아옵니다. 필터 클래스에서 객체를 생성할 때 꼭 response 객체를 인자로 줘야 합니다.


반응형
donaricano-btn
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함