Java에서 Filter는 웹 애플리케이션에서 들어오는 요청과 응답을 가로채고, 수정하거나 필터링하는 역할을 수행한다.
Filter는 Servlet 컨테이너에 의해 관리되며, 여러 개의 Filter를 체인형태로 연결하여 사용할 수 있다. 이번에는 Java에서 Filter의 개념, 사용 이유, 그리고 어디에서 사용해야 하는지에 대해 예제를 같이 포함하여 알아보자.
먼저 Filter의 개념👉
- Filter는 Servlet의 기능을 보완하거나 요청과 응답을 변형, 감시, 필터링하는 데 사용된다.
- Filter는 Servlet컨테이너에 의해 초기화되고 관리된다.
- Filter는 웹 애플리케이션에서 특정 URL패턴이나 Servlet에 대해 적용될 수 있다.
- Filter는 요청 전후에 작업을 수행할 수 있으며, 요청을 가로채고 응답을 수정할 수도 있다.
Filter의 사용 이유👉
- 보안
인증, 권한 부여, 보안 검사 등과 같은 보안 관련 작업을 수행할 수 있다. - 로깅 및 감시
요청과 응답에 대한 로그를 기록하거나, 애플리케이션의 성능을 감시할 수 있다. - 데이터 변환
요청이나 응답의 데이터 형식을 변환하거나, 압축 및 암호화 작업을 수행할 수 있다. - 예외 처리
예외 상황에 대한 처리를 수행하고, 특정 조건에 따라 요청을 중단시킬 수 있다.
Filter의 예제👉
다음은 Filter를 사용하여 모든 요청에 대해 로깅 작업을 수행하는 예제이다.
1. LoggingFilter.java
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class LoggingFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
// 필터 초기화 작업
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
// 로깅 작업 수행
String requestURI = httpRequest.getRequestURI();
System.out.println("요청 로깅: " + requestURI);
// 다음 필터 또는 서블릿으로 요청 전달
chain.doFilter(request, response);
}
public void destroy() {
// 필터 종료 작업
}
}
2. web.xml
<web-app>
<filter>
<filter-name>LoggingFilter</filter-name>
<filter-class>LoggingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoggingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
위의 예제에서는 LoggingFilter라는 Filter를 정의하고, 모든 요청에 대해 로깅 작업을 수행한다.
Filter의 doFilter메소드 내에서는 현재 요청의 URI를 가져와 로깅 작업을 수행하고, 다음 Filter 또는 Servlet으로 요청을 전달한다. 이렇게 체인에 연결된 다른 Filter 또는 Servlet에서 작업을 수행한 후, 응답이 클라이언트에게 전달된다.
web.xml파일에서는 Filter를 등록하고, 모든 URL에 대해 Filter를 적용하도록 설정한다.
이와 같이 Filter를 사용하면 웹 애플리케이션의 요청과 응답을 가로채고 필요한 작업을 수행할 수 있다.
Filter는 보안, 로깅, 데이터변환, 예외 처리등 다양한 곳에서 유용하게 사용된다.
'Java' 카테고리의 다른 글
간단히 보는 JAVA의 자료구조 (0) | 2023.06.13 |
---|---|
EL (Expression Language) (0) | 2023.06.13 |
JAVA Session scope (0) | 2023.05.31 |
JAVA JSP (0) | 2023.05.30 |
JAVA RequestDispatcher (0) | 2023.05.26 |
댓글