티스토리 뷰

필터

 

필터는 웹 컴포넌트(jsp,서블릿)와 웹 브라우저 사이에 존재한다. 정확히는 웹 컨테이너 내부에 여러개의 웹 컴포넌트들이 있는데 웹 컨테이너와 웹 컴포넌트 사이에 존재한다. 사용자가 현재 로그인 상태인지 아닌지에 따라 보여줘야 할 페이지가 다를 수 있다. 이때 필터에 사용자가 로그인 상태인지 확인하는 코드를 작성하게 되면 로그인 여부에 따라 다른 페이지를 보여 줄 수 있다.

위와 같은 구조로 구성 되어 있다.

래퍼

 


기본적으로는 사용자가 보낸 요청을 임의로 수정할 수 없지만 그 요청을 감싸는 래퍼 클래스를 만들면 수정할수 있다.

래퍼 클래스는 요청 래퍼 클래스와 응답 래퍼 클래스 2가지 종류가 있다.


웹 컨테이너는 웹 브라우저로부터 요청을 받게 되면 request객체와 response객체를 만들게 된다. 그리고 이것을 web.xml파일에 기술된 서블릿들을 보고 적절한 서블릿에 이 객체를 전달하게 되는데, 이때 무조건 필터를 거치게 된다.


따라서, 필터 부분에서 요청 클래스 또는 응답 클래스에 대한 래퍼 클래스를 만듦으로써 기본적인 요청,응답에 대한 수정을 가할수있다. 




필터체인

 

위와 같이 필터가 1개만 존재할수도 있지만, 여러개의 필터가 겹겹이 쌓여 있을수도 있다. 마치 정수기의 필터처럼.

여러개의 필터가 존재할경우 요청이 순서대로 전달되고 응답이 순서대로 응답된다.


필터 클래스를 만들고 web.xml에 등록해주게 되면 웹 컨테이너가 필터의 존재를 인식하게 되고, 요청을 제일먼저 웹 컴포넌트에 보내는게 아니라 첫번째 필터에 전달하게 된다.

필터 클래스는 다음과 같이 필터 인터페이스를 구현해야 한다. 서블릿과 마찬가지로 웹 컨테이너에 의해서 생성되고 초기화 된다. 또한, 서블릿과 마찬가지로 웹 컨테이너에 의해서 생명주기가 관리 되기 때문에 init() destroy()메소드가 기본적으로 존재하며, 추가적으로 필터 기능을 수행하기 위해서 doFilter라는 메소드가 존재한다.



필터 체인의 doFilter 메소드를 호출함으로써 다음 필터에게 요청또는 응답을 전달할 수 있다. 보면 HttpRequest가 아닌 ServletRequest객체를 넘겨주고있다. 왜냐면, 이 HttpRequest는 웹 컨테이너가 받고, 그 받은것을 서블릿에게 요청을 보내야 하기 때문에 이름이 ServletRequest로 바뀐게 아닐까?라고 추측된다. 뭔가 적절한 처리가 추가 되었겠지?


doFilter메소드 안에서 chain.doFilter(request,response);를 호출 하면 필터 체인에서의 다음 필터가 호출 된다.




이런식으로 필터 클래스를 만들고 난 다음에는 web.xml에 필터를 등록하여 웹 컨테이너가 알아볼수있게 해야한다.

우선 그렇게 하기 위해서는 필터 클래스를 웹앱루트/WEB-INF/classes/myfilter 와 같은 경로로 구성된 myfilter 디렉토리를 만들고 그 아래에 클래스를 넣도록 하자. classes는 컴파일된 서블릿들이 존재하는 폴더이다.


필터를 web.xml에 등록하는 방법은 구글링을 하도록 하자. 여기서는 개념적인 것만 다루겠다.


필터 체인의 방향 바꾸기

 



필터를 이용하면 필터 체인이 향하는 방향을 바꿀 수 있다. 위에서 얘기했듯이, 사용자의 로그인 여부를 체크하여 로그인 상태면 이 페이지로 로그인 안되있으면 다른 페이지로 분기를 다르게 할 수 있다.


필터 체인 클래스의 doFilter메소드에 다음과 같이 구현하면 된다.




출처 cfile27.uf.tistory.com/attach/177CEF4B503EFC421D9EE9


'컴퓨터 공학과 졸업 > JSP&Servlet' 카테고리의 다른 글

서블릿 구동 절차  (0) 2018.08.01
모델1 모델2 MVC패턴  (0) 2018.07.27
JSP의 새로운 문법  (0) 2018.07.26
Servlet Container  (0) 2018.07.26
웹 어플리케이션 구조  (0) 2018.01.26
댓글
최근에 올라온 글
최근에 달린 댓글
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
글 보관함