Pink Spider/Spring Gateway Cors 설장하기

Created Fri, 28 Mar 2025 11:41:41 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
903 Words 4 min

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:8899https://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