01 필터의 개요
필터 (filter) 는 클라이언트와 서버 사이에서 request 와 response 객체를 먼저 받아 사전/사후 작업 등 공통적으로 필요한 부분을 처리하는 것을 말합니다. 필터는 클라이언트의 요청이 웹 서버의 서블릿, JSP,HTML 페이지 같은 정적 리소스에 도달하기 전과 , 반대로 정적 리소스에서 클라이언트로 응답하기 전에 필요한 전처리를 가능하게 합니다.
필터는 HTTP 요청과 응답을 변경할 수 있는 코드로 재사용이 가능합니다. 한편 클라이언트와 정적 리소스 사이ㅏ에 여러 개의 필터로 이루어진 필터 체인을 제공하기도 합니다.
웹 애플리켕션에 필터 기능을 제공하기 위해 Filter인터페이스를 구현하는 자바 클래스를 생성하고, 생성된 자바 클래스를 web.xml파일에 등록한다.
필터의 기능
필터 | 기능 |
Request 필터 | 인증(사용자 인증) 요청 정보를 로그 파일로 작성 암호화 인코딩 작업. |
Response 필터 | 응답 결과 데이터 압축 응답 결과에 내용 추가/ 수정 총 서비스 시간 측정 |
02 Filter 인터페이스의 구현 클래스
Filter 인터페이스는 필터 기능을 구현하는 데 핵심적인 역할을 합니다. 클라이언트와 서버의 리소스 사이에 위치한 필터의 기능을 제공하기 위해 자바 클래스로 구현해야 하며 형식은 다음과 같다. 또한 자바 클래스로 구현할 때패키지 javax.servlet.Filter를 임포트 해야 합니다.
import javax.Servlet.Filter;
public class 클래스 이름 implements Filter{
....
}
Filter 인터페이스는 다음과 같은 메소드를 가지고 있습니다.
메소드 | 설명 |
init(..) | 필터 인스턴스의 초기화 메소드이다. |
doFilter(..) | 필터 기능을 작성하는 메소드 이다. |
destroy(..) | 필터 인스턴스 종료 전에 호출되는 메소드이다. |
2.1 init() 메소드
init()메소드는 JSP 컨테이너가 필터를 초기화할때 호출되는 메소드로 형식은 다음과 같다. init()메소드는JSP컨테이너 내에서 초기화 작업을 수행할 필터 인스턴스를 생성한 후 한번만 호출된다. init()메소드는JSP 컨테이너에 의해 호출되어 필터의 서비스가 시작되고 있음을 나타낸다.
public void init(FilterConfig filterConfig) throws ServletException
여기서 매개변수 FilterConfig 객체는 JSP컨테이너가 초기화 중 필터에 정보를 전달하는데 사용하는 필터 구성 객체로 다음과 같은 메소드를 지원한다.
FilterConfig인터페이스 메소드 종류
메소드 | 반환 유형 | 설명 |
getFilterName() | String | web.xml파일에 설정된 필터 이름을 반환한다. |
getInitParameter(String name) | String | web.xml파일에 설정된 매개변수에 대한 매개변수 값을 반환한다. 초기화 매개변수가 존재하지 않으면 null을 반환한다. |
getInitParameterNames() | Enumeration<String> | web.xml파일에 설정된 모든 매개변수 이름을 퐘하는 Enumeration객체 타입을 반환 한다. 초기화 매개변수가 존재하지 않으면 비어있는 Enumeration을 반환한다. |
getServletContext() | ServletContext | ServletContext객체를 반환한다. |
다음은 init()메소드를 구현한 예로 JSP 컨테이너 내에 초기화 작업을 수행할 필터 인스턴스를 생성한 후 init()메소드를 호출하여 '필터 초기화 ...' 메시지를 출력한다.
[init()메소드 사용 예]
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("필터 초기화 .. ");
}
2.2 doFilter()메소드
doFilter() 메소드는 JSP 컨테이너가 필터를 리소스에 적용할 때만다호출되는 메소드로 형식은 다음과 같다. doFilter() 메소드는 init() 메소드 후에 호출되며, 필터가 어떤 기능을 수행할 필요가 있을 때마다 호출된다.
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws java.io.IOException, ServletException
첫번째 매개변수 ServletRequest 객체는 체인을 따라 전달하는 요청이고, 두번째 매개변수 ServletResponse객체는 체인을 따라 전달할 응답이다. 세번째 매개변수FilterChain 객체는 체인에서 다음 필터를 호출하는 데 사용되는데, 만약 호출 필터가 체인의 마지막 필터이면 체인의 끝에서 리소스를 호출한다.
필터는 연속된 체인을 따라 다음에 존재하는 필터로 이동하여 연속적으로 수행한다. 이때 수행해야 할 필터 객체는 doFilter()메소드이 매개변수 FilterChain 객체로 전달된다. FilterChain객체는 동기화를 위해서도 존재하지만 필터의 수행 과정을 연속적으로 하는 방법으로도 사용된다. FilterChain 객체는 다음과 같이 하나의 메소드만 지원한다.
FilterChain 인터페이스 메소드의 종류
메소드 | 반환 유형 | 설명 |
doFilter(ServletRequest request, ServletResponse response) |
void | 체인의 다음 필터 또는 리소스로 제어를 전달한다. |
다음은 doFilter()메소드를 구현한 예이다. 필터는 한번만 수행되는것이 아니라 요청을 받았을 때 수행되고 filterChain.doRilter()를 통해 다음 부분으로 넘겨주며, 다음 부분이 모두 수행되면 다시 필터로 완전한 응답 객체와 함께 제어권이 넘어온다. 따라서 filterChain.doFilter() 메소드를 기준으로 전처리 , 후처리 부분으로 나뉜다.
[doFilter() 메소드 사용 예]
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain ) throws IOException, ServletException{
System.out.println("JSP 처리 전 필터 수행...");
filterchain.doFilter(request, response);
System.out.println("JSP 처리 후 필터 수행.. ");
}
위의 예에서 filterChain.doFilter() 메소드가 doFilter() 메소드 안에 없으면 수행 결과를 확인 할 수 없다. 즉 filterChain.doFilter()메소드를 사용하여 다음 단계를 수행한 후 결과를 다시 받는 것이다.
2.3 destory()메소드
destory()메소드는 필터 인스턴스를 종료하기 전에 호출하는 메소드로 형식은 다음과 같다. JSP컨테이너가 필터 인스턴스를 삭제하기 전에 청소작업을 수행하는데 사용되며, 이는 필터로 열린 리소스를 모두 닫을 수 있는 방법이다. destory() 메소드는 필터의 수명 동안 한번만 호출된다.
public void destory()
다음은 destory() 메소드를 구현한 예로, JSP 컨테이너가 필터 인스턴스를 삭제하기 전에 destory() 메소드를 호출하여 '필터 해제..' 메시지를 출력한다.
[destory() 메소드 사용 예 ]
@Override
public void destory(){
System.out.println("필터 해제..");
}
'JSP, Servlet, MySQL > JSP - webmarket' 카테고리의 다른 글
JSP Servlet 필터 : 로그 기록하기 3 (1) | 2024.02.05 |
---|---|
JSP Servlet 필터 : 로그 기록하기 2 (1) | 2024.01.15 |
JSP Servlet 예외 처리 : 예외 처리 페이지 만들기 -2 (2) | 2024.01.13 |
JSP Servlet 예외 처리 : 예외 처리 페이지 만들기 (3) | 2024.01.13 |
JSP Servlet 시큐리티 : 상품 등록 페이지의 보안 처리하기 2 (0) | 2023.09.15 |