[java] Guice와 서블릿 CORS 처리 방법

CORS(Cross-Origin Resource Sharing)는 웹 애플리케이션이 다른 도메인에서 리소스를 요청할 수 있도록 허용하는 메커니즘입니다. Guice와 서블릿을 함께 사용하는 경우, Guice는 의존성 주입(Dependency Injection)을 통해 서블릿을 관리하므로 CORS를 처리하는 방법에 대한 정확한 설정이 필요합니다.

Guice 설정

먼저, Guice 모듈에서 Filter 클래스를 바인딩하여 CORS 필터를 등록해야 합니다. 다음 예제 코드를 참고하세요.

import com.google.inject.AbstractModule;
import com.google.inject.servlet.ServletModule;
import org.eclipse.jetty.servlets.CrossOriginFilter;

public class MyGuiceModule extends AbstractModule {

    @Override
    protected void configure() {
        install(new ServletModule() {
            @Override
            protected void configureServlets() {
                filter("/*").through(CrossOriginFilter.class);
            }
        });
    }
}

위의 예제에서는 CrossOriginFilterFilter로 등록하고, 모든 요청에 대해 CORS를 처리하도록 설정하고 있습니다. 필요한 경우, CrossOriginFilter의 세부적인 설정을 추가할 수도 있습니다.

서블릿 CORS 처리

Guice 모듈에서 CORS 필터를 등록했으면, 서블릿에서 CORS를 설정할 수 있습니다. 아래 예제 코드는 Guice와 서블릿을 함께 사용하는 웹 애플리케이션에서 CORS를 처리하는 방법을 보여줍니다.

import com.google.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;

@Path("/example")
public class MyResource {

    @Context
    HttpServletRequest httpRequest;

    @Context
    HttpServletResponse httpResponse;

    @Inject
    public MyResource() {
    }

    @OPTIONS
    public void handleOptions() {
        httpResponse.addHeader("Access-Control-Allow-Origin", "*");
        httpResponse.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        httpResponse.addHeader("Access-Control-Allow-Headers", "Content-Type");
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public String getExample() {
        // Handle GET request
    }

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public void postExample(String data) {
        // Handle POST request
    }

    // 다른 HTTP 메서드에 대한 처리도 추가 가능
}

위의 예제에서는 @OPTIONS 어노테이션을 사용하여 옵션 요청에 대한 처리를 구현하고 있습니다. handleOptions 메서드는 Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers 헤더를 설정하여 CORS를 처리합니다.

서블릿의 각 메서드에는 @Produces@Consumes 어노테이션을 사용하여 요청과 응답의 미디어 타입을 설정할 수 있습니다. 필요에 따라 다른 HTTP 메서드도 추가하여 처리할 수 있습니다.

결론

Guice와 함께 서블릿을 사용하는 웹 애플리케이션에서 CORS를 처리하는 방법에 대해 알아봤습니다. Guice 모듈에서 CORS 필터를 등록하고, 서블릿에서 @OPTIONS 메서드를 이용하여 CORS 정책을 설정할 수 있습니다. 이를 통해 서로 다른 도메인 간에 자원을 공유하는 웹 애플리케이션을 개발할 수 있습니다.

참고 자료