javaboiii의 Web

Web - 필터(Filter)

javaboiii 2024. 9. 5. 19:40

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