WEB
필터란(Filter)란
필터(Filter)는 자바 서블릿(Java Servlet) API의 일부로, 웹 애플리케이션에서 요청(request)과
응답(response)을 처리하기 전에 추가적인 작업을 수행할 수 있게 해주는 컴포넌트임
필터는 특정 요청에 대해 항상 수행됨
리스너와는 차이가 있음
필터는 요청과 응답의 흐름을 조작하고 필터링하는 데 사용됨. 요청과 응답을 처리하기 전과 후에
작업을 수행할 수 있음
리스너는 웹 애플리케이션의 특정 이벤트에 반응함. 애플리케이션의 라이프사이클 이벤트에 따라
호출되며, 주로 애플리케이션의 상태 변화를 감지(모니터링, 감시)하고 처리하는 데 사용됨
주로
보안, 요청의 인증 / 인가 인코딩에 사용됨
필터의 동작 원리
1. 요청 처리 전 - 클라이언트가 요청을 보내면, 필터는 해당 요청을 처리하기 전에 수행됨
2. 요청 처리 후 - 필터는 요청을 서블릿이나 JSP에 전달하기 전에 필요한 작업을 처리
3. 응답 처리 전 - 서블릿이나 JSP에서 응답을 생성한 후, 응답이 클라이언트에 전달되기 전에 필터가 수행됨
4. 응답 처리 후 - 필터는 응답을 클라이언트에게 전달하기 전에 추가적인 작업을 수행함
필터(filter)의 메소드
package controller.common;
import java.io.IOException;
import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.FilterConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpFilter;
import jakarta.servlet.http.HttpServletRequest;
@WebFilter("*.do")
public class ValidFilter extends HttpFilter implements Filter {
public ValidFilter() {
super();
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("로그 : 필터가 호출됨");
// 권한확인 로직
// ServletRequest는 HttpServlet 객체보다 상위 객체이기 때문에 형변환이 필요함
HttpServletRequest httpRequest = (HttpServletRequest)request;
// 요청 추출
String uri=httpRequest.getRequestURI();
String cp=httpRequest.getContextPath();
String command=uri.substring(cp.length());
// 요청 검사
if(command.equals("/mypagePage.do")) {
if(httpRequest.getSession().getAttribute("loginInfo") == null) {
throw new NullPointerException(); // uncheck 예외
}
}
// 다음 필터가 있다면 해당 필터를 수행
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
destroy 메서드
destroy 메서드는 필터 객체를 서비스에서 제거하고 사용하는 자원을 반환하기 위한 메서드임.
서버의 웹 컨테이너에 의해 1번 호출되며 이후에는 doFilter에 의해 처리되지 않음
doFilter 메서드
doFilter 메서드는 ulr-pattern에 맞는 모든 HTTP 요청이 디스패처 서블릿으로 전달되기 전에 웹 컨테이너에 의해
실행되는 메서드임. doFilter의 파라미터로는 FilterChain이 있는데, FilterChain의 doFilter를 통해 다음 대상으로
요청을 전달함. chain.doFilter() 전/후에 필요한 처리 과정을 넣어줌으로써 원하는 처리를 진행할 수 있음
init 메서드
init 메서드는 필터 객체를 초기화하고 서비스에 추가하기 위한 메서드임. 웹 컨테이너가 1회 init 메서드를 호출해서
필터 객체를 초기화하면 이후의 요청들은 doFilter를 통해 처리됨
비슷한 기능에는 인터셉터가 있음
'javaboiii의 Web' 카테고리의 다른 글
포트원 결제 API - 1 (0) | 2024.09.06 |
---|---|
Web - 구글 이메일 API (0) | 2024.09.05 |
Web - 안내창으로 사용자 경험 높이기 (0) | 2024.09.04 |
Web - M V C 작업 시 유의사항 (0) | 2024.09.03 |
Web - 리스너(Listener) (0) | 2024.09.02 |