61장. JAX-RS 2.0 필터 및 인터셉터
초록
JAX-RS 2.0은 REST 호출을 위한 처리 파이프라인에 필터 및 인터셉터를 설치하기 위한 표준 API 및 의미 체계를 정의합니다. 필터 및 인터셉터는 일반적으로 로깅, 인증, 권한 부여, 메시지 압축, 메시지 암호화 등과 같은 기능을 제공하는 데 사용됩니다.
61.1. JAX-RS 필터 및 인터셉터 소개
61.1.1. 개요
이 섹션에서는 JAX-RS 필터 및 인터셉터의 처리 파이프라인에 대한 개요를 제공하여 필터 체인 또는 인터셉터 체인을 설치할 수 있는 확장 지점을 강조 표시합니다.
61.1.2. 필터
JAX-RS 2.0 필터 는 CXF 클라이언트 또는 서버를 통해 전달되는 모든 JAX-RS 메시지에 대한 개발자 액세스 권한을 부여하는 플러그인 유형입니다. 필터는 메시지(HTTP 헤더, 쿼리 매개 변수, 미디어 유형 및 기타 메타데이터)와 관련된 메타데이터를 처리하는 데 적합합니다. 필터는 메시지 호출을 중단할 수 있는 기능을 갖습니다(예: 보안 플러그인에 사용).
원하는 경우 각 확장 지점에 여러 개의 필터를 설치할 수 있습니다. 이 경우 필터가 체인에서 실행됩니다(단, 각 설치된 필터에 대한 우선순위 값을 지정하지 않는 한 실행 순서는 정의되지 않습니다).
61.1.3. 인터셉터
JAX-RS 2.0 인터셉터 는 메시지 본문에 대한 개발자 액세스 권한을 부여하는 플러그인 유형입니다. 인터셉터는 MessageBodyReader.readFrom
메서드 호출( reader 인터셉터의 경우) 또는 MessageBodyWriter.writeTo
메서드 호출( writer 인터셉터의 경우)을 중심으로 래핑됩니다.
원하는 경우 각 확장 포인트에 여러 인터셉터를 설치할 수 있습니다. 이 경우 인터셉터는 체인에서 실행됩니다(단, 각 설치된 인터셉터의 우선 순위 값을 지정하지 않는 한 실행 순서가 정의되지 않음).
61.1.4. 서버 처리 파이프라인
그림 61.1. “서버-Side Filter and Interceptor Extension Points” 서버 측에 설치된 JAX-RS 필터 및 인터셉터의 처리 파이프라인 개요를 보여줍니다.
그림 61.1. 서버-Side Filter and Interceptor Extension Points
![jaxrs20filters 01](https://access.redhat.com/webassets/avalon/d/Red_Hat_Fuse-7.11-Apache_CXF_Development_Guide-ko-KR/images/452d102dcf8c37a5977e2b6f17a56ac8/jaxrs20filters_01.gif)
61.1.5. 서버 확장 지점
서버 처리 파이프라인에서 다음 확장 포인트 중 하나에서 필터(또는 인터셉터)를 추가할 수 있습니다.
-
PreMatchContainerRequest
필터 -
ContainerRequest
필터 -
ReadInterceptor
-
ContainerResponse
필터 -
WriteInterceptor
리소스 일치가 발생 하기 전에 PreMatchContainerRequest
확장 지점에 도달하므로 이 시점에서 일부 컨텍스트 메타데이터를 사용할 수 없습니다.
61.1.6. 클라이언트 처리 파이프라인
그림 61.2. “클라이언트-Side Filter and Interceptor Extension Points” 클라이언트측에 설치된 JAX-RS 필터 및 인터셉터의 처리 파이프라인 개요를 보여줍니다.
그림 61.2. 클라이언트-Side Filter and Interceptor Extension Points
![jaxrs20filters 02](https://access.redhat.com/webassets/avalon/d/Red_Hat_Fuse-7.11-Apache_CXF_Development_Guide-ko-KR/images/8231a672eea995733543b6c5e80f0378/jaxrs20filters_02.gif)
61.1.7. 클라이언트 확장 지점
클라이언트 처리 파이프라인에서 다음 확장 포인트 중 하나에서 필터(또는 인터셉터)를 추가할 수 있습니다.
-
ClientRequest
필터 -
WriteInterceptor
-
ClientResponse
필터 -
ReadInterceptor
61.1.8. 필터 및 인터셉터 순서
동일한 확장 지점에 여러 필터 또는 인터셉터를 설치하는 경우 필터 실행 순서는 할당된 우선 순위에 따라 달라집니다(Java 소스의 @Priority
주석 사용). 우선 순위는 정수 값으로 표시됩니다. 일반적으로 우선 순위가 높은 필터는 서버 측의 리소스 메서드 호출에 더 가까운 반면, 우선 순위가 더 낮은 필터는 클라이언트 호출에 더 가깝게 배치됩니다. 즉, 요청 메시지에 작동하는 필터 및 인터셉터는 우선순위 번호의 오름차순 으로 실행됩니다. 응답 메시지에 대한 필터 및 인터셉터는 우선 순위 번호의 내림차순으로 실행됩니다.
61.1.9. 필터 클래스
사용자 지정 REST 메시지 필터를 생성하기 위해 다음 Java 인터페이스를 구현할 수 있습니다.
61.1.10. 인터셉터 클래스
사용자 지정 REST 메시지 인터셉터를 생성하기 위해 다음 Java 인터페이스를 구현할 수 있습니다.