[Spring Boot] CORS Configuration 설정하기
CORS 설정하는 방법에는 여러가지가 있는데,
서버에서 설정하는 법과 클라이언트에서 설정하는 법 중 서버에서 설정하는 게 표준이라고 한다.
서버에서 설정하는 방법 중
내가 선호하는 CORS 설정법은 Configuration 설정 파일을 만드는 것이다.
서버 url은 localhost:8080
클라이언트 url은 localhost:3000 이라고 가정한다.
application.yml
cors:
allow:
origins: http://localhost:3000
다음과 같이 cors 설정해줄 클라이언트 url을 적어준다.
꼭 cors.allow.origins 로 안해줘도 된다.
Configuration 파일 생성
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Value("${cors.allow.origins}")
private String[] corsAllowOrigins;
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins(corsAllowOrigins)
.allowedMethods("HEAD", "OPTIONS", "GET", "POST", "PUT", "PATCH", "DELETE")
.allowCredentials(true);
}
}
상단에 application.yml 에 추가한 cors.allow.origins를 불러오고
addCorsMappings 메소드를 오버라이딩한다.
- addMapping : CORS를 적용할 URL패턴을 정의
- allowedOrigins : 자원 공유를 허락할 Origin을 지정(클라이언트 서버인 localhost:3000)
: application.yml 에 cors.allow.origins를 등록해서 불러오는 방법 말고
직접 "http//localhost:3000"으로 지정해도 됨
- allowedMethods : 허용할 HTTP method를 지정
- allowCredentails : 쿠키 요청을 허용한다(다른 도메인 서버에 인증하는 경우에만 사용해야하며, true 설정시 보안상 이슈가 발생할 수 있다)
- maxAge : preflight 요청에 대한 응답을 브라우저에서 캐싱하는 시간
+) addAllOrigin("*") 과 .allowCrededentials(true) 를 동시에 사용할 경우 에러가 난다고 한다.
allowCredential이 true라면 “Access-Control-Allow-Origin” 응답 헤더헤더를 설정 할 수 없기 때문에 특수 값인 "*"를 사용 못하는 것이다.
이럴 때 해결방법은 특정 주소만 허락하거나, addAllOrigin("*") 대신 .addAllOriginPatterns("*")를 사용하면 되는 것.