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 설정을 구체적으로 정의하여, 원하는 보안 수준에 맞는 설정을 적용할 수 있습니다.
|