Preloader image
DDD

자바

CORS 설정

작성자 관리자 (admin)
조회수 3,484
입력일 2024-09-07 06:56:30

CORS 설정을 web.xml에서 더 구체적으로 하려면, CORSFilter를 세부적으로 조정하여 특정 도메인, 메서드, 헤더 등을 명확히 설정할 수 있습니다.

1. CORSFilter.java 구현

CORS 필터를 더욱 구체적으로 구현하여 특정 설정을 적용할 수 있습니다. 아래 예제는 필터가 특정 도메인만 허용하고, 필요한 메서드와 헤더를 명확히 지정하는 방식입니다.

* JAVA - CORSFilter

package com.example; // web.xml 설정
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CORSFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 필터 초기화 시 필요한 작업
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        
        // 허용할 도메인 설정 (여러 도메인일 경우 ,로 구분 가능)
        httpResponse.setHeader("Access-Control-Allow-Origin", "https://example.com"); 
        
        // 허용할 HTTP 메서드 설정
        httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");

        // 허용할 요청 헤더 설정
        httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With");

        // 자격 증명(쿠키, HTTP 인증) 허용 여부
        httpResponse.setHeader("Access-Control-Allow-Credentials", "true");

        // Preflight 요청에 대한 캐시 유지 시간 (초 단위)
        httpResponse.setHeader("Access-Control-Max-Age", "3600");

        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        // 필터 종료 시 필요한 작업
    }
}

2. web.xml 설정

web.xml 파일에 위에서 구현한 CORSFilter를 등록하고 매핑을 설정합니다.

<filter>
    <filter-name>CORSFilter</filter-name>
    <filter-class>com.example.CORSFilter</filter-class> <!-- 실제 패키지 경로로 수정 -->
</filter>

<filter-mapping>
    <filter-name>CORSFilter</filter-name>
    <url-pattern>/*</url-pattern> <!-- 모든 요청에 필터 적용 -->
</filter-mapping>

필터 설정의 구체적 의미

  • Access-Control-Allow-Origin: 허용할 도메인을 명시합니다. 예: https://example.com. 모든 도메인을 허용하려면 *로 설정합니다.
  • Access-Control-Allow-Methods: 허용할 HTTP 메서드를 지정합니다. 예: GET, POST, PUT, DELETE, OPTIONS.
  • Access-Control-Allow-Headers: 요청 시 허용할 헤더를 지정합니다. 예: Content-Type, Authorization, X-Requested-With.
  • Access-Control-Allow-Credentials: 인증 정보(쿠키 등)를 포함한 요청을 허용할지 여부를 설정합니다. true로 설정 시 자격 증명이 포함된 요청을 허용합니다.
  • Access-Control-Max-Age: 브라우저에서 프리플라이트(Preflight) 요청의 결과를 캐시할 시간을 초 단위로 설정합니다. 예: 3600(1시간).

이와 같이 web.xml과 필터 클래스에서 CORS 설정을 구체적으로 정의하여, 원하는 보안 수준에 맞는 설정을 적용할 수 있습니다.