Filter

Filter (요청 전·후처리 필터)

들어오는 요청을 전처리(pre-process)하고 후처리(post-process)하는 데 사용되는 추상 클래스입니다. 전처리는 애플리케이션의 교환 핸들러가 호출되기 전에, 후처리는 교환 핸들러가 반환된 후에 일어나요. 필터들은 체인으로 구성되며 HttpContext 인스턴스에 연결됩니다.

출처: Java API Reference

본문

HTTP 서버(com.sun.net.httpserver)에서 요청을 처리하는 과정에 개입하려면 이 필터를 사용합니다. 체인 안의 각 필터는 자신의 doFilter(HttpExchange, Chain) 구현 안에서 다음 필터를 호출해요. 체인의 마지막 필터는 애플리케이션의 교환 핸들러를 호출합니다. 필터의 구조는 Filter.Chain(서버와 연결된 필터 체인)이라는 중첩 클래스로 표현됩니다.

정적 팩토리 메서드

  • beforeHandler(String description, Consumer<HttpExchange> operation) — 주어진 설명과 동작으로, 핸들러 호출 전에 수행되는 전처리 필터를 반환합니다.
  • afterHandler(String description, Consumer<HttpExchange> operation) — 핸들러 호출 후에 수행되는 후처리 필터를 반환해요.
  • adaptRequest(String description, UnaryOperator<Request> requestOperator) — 요청 상태를 검사하고 어쩌면 조정하는 전처리 필터를 반환합니다.

메서드

  • doFilter(HttpExchange exchange, Filter.Chain chain) — 주어진 교환을 전·후처리하도록 이 필터에 요청합니다. 필터는 요청 헤더를 검사하거나 수정할 수 있고, 적절한 필터 스트림을 만들어 HttpExchange.setStreams(...)로 호출해 요청 본문이나 응답 본문을 필터링할 수 있으며, 교환에 속성 객체를 설정해 다른 필터나 교환 핸들러가 접근하게 할 수 있어요. 그리고 다음 두 가지 중 하나를 결정합니다. Filter.Chain.doFilter(HttpExchange)를 호출해 체인의 다음 필터를 호출하거나, 호출하지 않아 호출 체인을 종료하는 것입니다. 첫 번째 선택을 하면 doFilter가 반환될 때 체인의 모든 후속 필터가 이미 호출된 상태라 응답 헤더를 검사·수정할 수 있어요. 두 번째 선택을 하면 이 필터가 HttpExchange를 사용해 적절한 응답을 직접 보내야 합니다. 어떤 필터 모듈이든 IOException을 던질 수 있으며, 잡았다면 반드시 다시 던져야 합니다. exchangechainnull이면 NullPointerException이 발생합니다.

이렇게 필터는 요청·응답을 가로채어 로깅, 인증, 압축 같은 횡단 관심사를 교환 처리에서 분리해 적용할 수 있게 해 줍니다. HttpContext에 여러 필터를 이어 붙여 복잡한 처리 파이프라인을 구성하는 것도 가능해요.

  • description() — 이 필터에 대한 짧은 설명을 반환합니다.

더 알아보기

Java 공식 API