Filter는 Java EE (Jakarta EE)의 Servlet API에서 제공하는 기능 중 하나로, 웹 애플리케이션에서 요청과 응답을 조작할 수 있는 강력한 도구입니다.
인증 및 권한 검사 - 사용자가 적절한 권한을 가지고 있는지 확인
로깅 및 감사(Audit Logging) - 요청 정보를 기록
입출력 데이터 변환 및 압축 - 요청 또는 응답 데이터를 수정
캐싱(Cache) 관리 - 특정 요청에 대한 캐시 처리
CORS(Cross-Origin Resource Sharing) 처리 - 보안 관련 설정
XSS/SQL Injection 방어 - 보안 필터링
장점
단점
init()
- Filter를 초기화하는 메서드이다.
- Servlet Container가 생성될 때 호출된다.
- default ****method이기 때문에 implements 후 구현하지 않아도 된다.
doFilter()
- Client에서 요청이 올 때 마다 doFilter() 메서드가 호출된다.
- doFilter() 내부에 필터 로직(공통 관심사 로직)을 구현하면 된다.
- WAS에서 doFilter() 를 호출해주고 하나의 필터의 doFilter()가 통과된다면
- Filter Chain에 따라서 순서대로 doFilter() 를 호출한다.
- 더이상 doFilter() 를 호출할 Filter가 없으면 Servlet이 호출된다.
destroy()
- 필터를 종료하는 메서드이다.
- Servlet Container가 종료될 때 호출된다.
- default method이기 때문에 implements 후 구현하지 않아도 된다.
setFilter()
- 등록할 필터를 파라미터로 전달하면 된다.
setOrder()
- Filter는 Chain 형태로 동작한다.
- 즉, 실행될 Filter들의 순서가 필요하다.
- 파라미터로 전달될 숫자에 따라 우선순위가 정해진다.
- 숫자가 낮을수록 우선순위가 높다.
addUrlPatterns()
- 필터를 적용할 URL 패턴을 지정한다.
- 여러개 URL 패턴을 한번에 지정할 수 있다.
- 규칙은 Servlet URL Pattern과 같다.
filterRegistrationBean.addUrlPatterns("/*")
- 모든 Request는 Custom Filter를 항상 지나간다.
Filter를 사용하려면 Filter Interface를 Implements 하여 구현한다.
구현한 Filter를 Bean으로 등록 한다.
HTTP 요청이 오면 doFilter() 메서드가 호출된다.
ServletRequest는 기능이 별로 없어서 HttpServletRequest로 다운 캐스팅 해야한다.chain.doFilter(request, response)
Filter를 등록하는 방법은 여러가지가 있다.
FilterRegistrationBean 을 사용한다.