Spring Boot CORS 설정하기
CORS 란?
Cross-Origin Resource Sharing, CORS 다른 출처의 자원을 공유할 수 있도록 설정하는것을 말합니다. CORS를 제대로 설정하지 않으면 원하는 리소스를 공유받지 못한다. CORS 문제를 Spring으로 해결하는 방법을 체크해본다.
Configuration 해결하기
addMapping
registry.addMapping 을 이용해서 CORS를 적용할 URL패턴을 정의할 수 있다. 아래처럼 "/**" 와일드 카드를 사용할 수 있다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
}
기본값은 아래와 같다.
- Allow All Origins.
- Allow Method GET, HEAD and POST.
- Allow all headers
- Set max age to 1800 seconds (30 min).
allowedOrigins
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*");
}
allowedOrigins 메소드를 이용해서 자원 공유 허락할 Origin 지정할 수 있다. 위 처럼 "*"로 모든 Origin을 허락할 수 있다.
한번에 여러 Origin을 설정할 수 있다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:8080", "http://localhost:8081");
}
}
allowedMethods
allowedMethods를 이용해서 허용할 HTTP method를 지정할 수 있다. "*"를 이용하여 모든 method를 허용할 수 있다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST");
}
maxAge
maxAge를 이용해서 원하는 시간만큼 캐싱을 할 수 있다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST")
.maxAge(3000);
}
Annotation 이용하기
CrossOrigin 어노테이션을 이용하면 허용할 origins, methods 지정할 수 있다.
@RequestMapping("/somePath")
@CrossOrigin(origins = "*", allowedHeaders = "*")
public class SomeController {
@CrossOrigin(origins="*")
@RequestMapping(value = "/{something}",method = RequestMethod.DELETE)
public ResponseEntity<String> delete(@PathVariable Long reservationNo) throws Exception{
}
}