Spring Cloud Gateway에서 globalcors 설정
- 특정 URI 패턴에 대해서만 CORS를 허용하고 싶다면, 설정한 cors-configurations 키의 패턴을 세분화하면 됩니다.
- 현재는 ‘/**‘로 모든 경로에 대해 허용하고 있으므로, 이를 제한하려면 예를 들어 /api/public/** 처럼 특정 경로로 좁혀주면 됩니다.
Spring Cloud Gateway에서 globalcors 설정을 사용할 때 특정 URI 패턴에 대해서만 CORS를 허용하고 싶다면,
설정한 cors-configurations 키의 패턴을 세분화하면 됩니다.
현재는 '/\*\*'로 모든 경로에 대해 허용하고 있으므로,
이를 제한하려면 예를 들어 /api/public/** 처럼 특정 경로로 좁혀주면 됩니다.
예시: 특정 경로 /api/public/** 에 대해서만 CORS 허용
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]': # ← 이걸 아래처럼 변경
# 이걸 삭제하거나 아래처럼 경로를 제한
'[ /api/public/** ]':
allowedOriginsPattern: 'http://example.com:8899'
allowedMethods:
- GET
- POST
- PUT
- DELETE
- OPTIONS
- PATCH
allowedHeaders: '*'
allow-credentials: true
주의사항:
allowedOriginsPattern은 정규식 기반입니다.allowedOrigins는 정확한 도메인 문자열 기반입니다.allow-credentials: true를 사용하려면allowedOriginsPattern대신allowedOrigins를 사용하는 것이 더 안정적입니다. (와일드카드와credentials을 함께 사용하면 브라우저에서 막을 수 있음)globalcors설정은 Gateway 필터보다 먼저 적용되는 WebFlux 레벨의 설정입니다.
필요하다면 여러 경로를 구분해서 여러 개의 설정도 가능해요:
cors-configurations:
'[ /api/public/** ]':
allowedOrigins: 'http://example.com'
allowedMethods:
- GET
- POST
allowedHeaders: '*'
allow-credentials: true
'[ /api/another-path/** ]':
allowedOrigins: 'http://example.com'
allowedMethods:
- GET
allowedHeaders: '*'
allowedOriginsPattern 에 여러 주소로 설정할 수는 없을까?
allowedOriginsPattern에 여러 주소를 넣으려면 하나의 정규식으로 표현해야 합니다.
YAML에서 리스트처럼 쓰는 게 아니라, 여러 패턴을 파이프 |로 묶은 정규식을 하나의 문자열로 작성해야 해요.
예시: http://121.136.108.44:8899 와 https://example.com 두 개 허용
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[ /api/public/** ]':
allowedOriginsPattern: 'http://121\\.000\\.111\\.222|https://example\\.com'
allowedMethods:
- GET
- POST
- PUT
- DELETE
- OPTIONS
- PATCH
allowedHeaders: '*'
allow-credentials: true
팁:
- 정규식이기 때문에
.,:같은 특수 문자는 백슬래시(\)로 이스케이프 해줘야 해요. allowedOriginsPattern대신allowedOrigins를 쓰면 여러 개를 리스트 형식으로 쉽게 쓸 수 있어요:
대안: allowedOrigins 리스트로 간단하게 여러 도메인 허용
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[ /api/public/** ]':
allowedOrigins:
- http://121.000.111.222
- https://example.com
allowedMethods:
- GET
- POST
- PUT
- DELETE
- OPTIONS
- PATCH
allowedHeaders: '*'
allow-credentials: true
둘 중 어느 방식이든 쓸 수 있고, allowedOrigins 방식이 직관적이라 실수도 줄일 수 있어요.
정규식이 꼭 필요한 게 아니라면 allowedOrigins를 추천!
정규식이 복잡하게 느껴지면, 특정 서브도메인 몇 개만 허용할 거라면 그냥 이렇게:
allowedOrigins:
- https://pink-spider.io
- https://admin.pink-spider.io