[java] JAX-RS 인터셉터 사용하기

JAX-RS는 자바 기반의 RESTful 웹 서비스를 개발하기 위한 API입니다. 이 API를 사용하면 웹 서비스의 구현과 관련된 많은 작업을 쉽게 처리할 수 있습니다. 이번에는 JAX-RS의 인터셉터를 사용하여 웹 서비스의 요청과 응답을 가로채고 처리하는 방법에 대해 알아보겠습니다.

인터셉터는 JAX-RS 애플리케이션의 요청과 응답 흐름에 개입하여 처리할 수 있습니다. 주로 보안, 오류 처리, 로깅 등 다양한 작업을 처리하는 데 사용됩니다. JAX-RS 인터셉터를 만들기 위해서는 javax.ws.rs.ext.ReaderInterceptorjavax.ws.rs.ext.WriterInterceptor 인터페이스를 구현해야 합니다.

ReaderInterceptor

ReaderInterceptor는 클라이언트로부터 받은 요청을 가로채고 처리하는 데 사용됩니다. 다음은 ReaderInterceptor를 사용하여 요청을 가로채고 로깅하는 예제입니다.

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.ReaderInterceptor;
import javax.ws.rs.ext.ReaderInterceptorContext;
import java.io.IOException;

@Provider
public class LoggingInterceptor implements ReaderInterceptor {
    @Override
    public Object aroundReadFrom(ReaderInterceptorContext context) throws IOException, WebApplicationException {
        // 요청 로깅
        System.out.println("Request intercepted");
        return context.proceed();
    }
}

위의 예제에서는 @Provider 애노테이션을 사용하여 인터셉터를 등록합니다. aroundReadFrom 메서드는 요청을 가로챈 후 추가적인 작업을 수행합니다. 여기에서는 단순히 “Request intercepted” 메시지를 출력하고 요청을 계속 진행시킵니다. 이제 이 인터셉터를 JAX-RS 애플리케이션에 등록하면 클라이언트의 요청을 가로챌 수 있습니다.

WriterInterceptor

WriterInterceptor는 서버의 응답을 가로채고 처리하는 데 사용됩니다. 다음은 WriterInterceptor를 사용하여 응답을 가로채고 마지막에 추가 정보를 추가하는 예제입니다.

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.WriterInterceptor;
import javax.ws.rs.ext.WriterInterceptorContext;
import java.io.IOException;

@Provider
public class AdditionalInfoInterceptor implements WriterInterceptor {
    @Override
    public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
        // 응답 가로채기
        context.proceed();
        // 추가 정보 추가
        context.getOutputStream().write("Additional info".getBytes());
    }
}

위의 예제에서도 @Provider 애노테이션을 사용하여 인터셉터를 등록합니다. aroundWriteTo 메서드는 응답을 가로챈 후 추가 작업을 수행합니다. 먼저 context.proceed()를 호출하여 원래의 응답을 처리하고, 그 다음에 context.getOutputStream().write("Additional info".getBytes())를 사용하여 추가 정보를 응답에 추가합니다.

이제 위의 WriterInterceptor를 JAX-RS 애플리케이션에 등록하면 응답을 가로채고 추가 정보를 추가할 수 있습니다.

JAX-RS 인터셉터를 사용하면 웹 서비스의 요청과 응답을 가로채고 처리할 수 있으므로 보안, 로깅, 오류 처리 등 다양한 작업을 쉽게 구현할 수 있습니다.

참고 문서: