본문 바로가기
Java/공부

필터

by notcherry 2023. 8. 10.

 

필터는 서블릿 필터라고도 하며 리스너와 마찬가지로 웹 앱을 지원하기 위한 특수한 형태의 서블릿이다. 클라이언트의 특정 요청에 따라 서블릿이나 JSP가 실행되기 전에 response 혹은 request 객체의 조작이나 추가적인 처리를 할 수 있다. 여러 개의 필터는 정해진 순서대로 요청 처리 전에 먼저 실행된다. 리스너처럼 기능만 구현하는 웹 프로그램의 경우에는 필터가 불필요하다. 하지만 앱 설계 관점에서 더 효과적인 앱 구현 및 운영이 필요하다고 판단되면 필터를 이용하는 것이 좋다. 

 

 

필터의 구조와 동작 과정

필터는 톰캣 서버를 시작할 때 필터 구현 클래스의 어노테이션을 참조하여 인터페이스를 구현한 클래스가 초기화된다. 또한 필터는 여러 개 존재할 수 있으며 필터는 각각 init() 메소드를 통해 초기화한다. 그리고 클라이언트 요청에 따라 서블릿이나 JSP가  호출되면, 어노테이션으로 설정된 필터 매핑 정보를 참조하여 서로 다른 필터를 적용할 수 있다.

doFilter()는 해당 필터가 적용되었을 때 수행할 작업을 구현하는 메인 메서드가 된다. 

 

출처 JSP 웹 프로그래밍과 스프링 프레임워크

 

위의 그림은 A필터는 모든 서블릿에 적용되고, B필터는 서블릿 a, b에, C필터는 서블릿 a,b,c에 적용되는 상황이다. 필터에 순서가 정해져있다는 말은 서블릿a 입장에서 보면 필터 A -> B-> C 순서대로 거친다는 말이다. 필터의 적용은 doFilter 메소드로 수행되고 servletRequest와 servletResponse의 내용을 가로채 필요한 작업을 수행하고 다음필터로 전달하거나 요청한 서블릿으로 이동한다. 필터를 의도한 순서에 맞춰 적용하기 위해서는 web.xml을 이요한 필터 등록이 필요하고, url 매핑 규칙을 잘 만들어 두어야 한다.

 

 

필터가 활용되는 예

  • 인증 - 페이지에서 로그인 여부나 특정 권한을 확인할 때 컨트롤러에서 처리하는 방법처럼 공통된 기능을 개별 컨트롤러에서 중복해서 구현하는 것은 추천하지 않는 방법이다. 이 경우 필터를 이용하면 앱 구조와 상관없이 기존 소스를 최대한 수정하지 않고 인증 기능을 수행할 수 있다.
  • 로깅/감사 - 특정 페이지 혹은 기능에 대해 현황을 모니터링할 때 필터를 통해 요청을 수행하기 전 로깅 처리를 할 수 있다.
  • 국제화 - 다국어 처리시 이용할 수 있다.

 

 

'Java > 공부' 카테고리의 다른 글

[자바] split 사용 방법  (0) 2023.10.31
  (0) 2023.08.13
리스너  (0) 2023.08.10
Servlet과 JSP(Java Server Pages)  (0) 2023.08.08
[Hashmap] .getOrDefault(key, defaultValue)  (0) 2023.07.25