CORS는 교차도메인 호출의 엄격한 제약조건을 완화하도록 도와주는 기능이다.
기본적으로 하나의 브라우저(클라이언트)에서 최초 접근 도메인과 다른 도메인의 엔드포인트를 호출 시에 이에 대한 동작을 거부한다.
이러할 때 CORS를 이용하여 동작하도록 설정할 수 있다.
CORS는 아래와 같은 헤더 값을 기반으로 동작한다.
header | 설명 |
---|---|
Access-Control-Allow-Origin | 도메인의 리소스에 접근할 수 있는 외부 도메인을 지정 |
Access-Control-Allow-Methods | 특정 HTTP방식만 지정 |
Access-Control-Allow-Headers | 특정 요청에 이용가능한 헤더 제한 |
특정 메서드 또는 클래스에 설정이 가능하며 해당 하는 URL을 허용하도록 설정할 수 있다.
@Controller
@CrossOrigin("http://localhost:8080")
class MainController {
...
}
@Bean
fun securityFilterChane(http: HttpSecurity): SecurityFilterChain {
http.cors {
val source = CorsConfigurationSource { request ->
val config = CorsConfiguration()
config.allowedOrigins = listOf("example.com", "http://localhost:8080")
config.allowedMethods = listOf("GET", "POST", "PUT", "DELETE")
return@CorsConfigurationSource config
}
it.configurationSource(source)
}
...
return http.build()
}
jhipster를 사용하고 있다면 application.properties, application.yml 같은 프로젝트 설정 파일로도 설정이 가능하다.
cors:
allowed-origins: 'http://localhost:8100,https://localhost:8100,http://localhost:9000,https://localhost:9000'
allowed-origin-patterns: 'https://*.githubpreview.dev'
allowed-methods: '*'
allowed-headers: '*'