Skip to content

Latest commit

Β 

History

History
39 lines (31 loc) Β· 2.33 KB

File metadata and controls

39 lines (31 loc) Β· 2.33 KB

SpringBoot - CORS

λΈŒλΌμš°μ € μ΄ˆκΈ°μ— λ³΄μ•ˆμƒμ˜ 이유둜 슀크립트 λ‚΄μ—μ„œ μ‹œμž‘λœ ꡐ착 좜처 HTTP μš”μ²­μ„ μ œν•œν•˜λŠ”λ°,
이λ₯Ό SOP(Same-Origin Policy, 동일 좜처 μ •μ±…) 라 ν•œλ‹€.

동일 좜처

SOP λŠ” 두 Origin 간에 ν”„λ‘œν† μ½œ, 포트, ν˜ΈμŠ€νŠΈκ°€ κ°™μ•„μ•Ό 동일 Origin 이라고 ν•  수 μžˆλ‹€.

  • 예λ₯Ό λ“€μ–΄ http://www.gitflow.orgμ΄λΌλŠ” URL 이 μžˆλ‹€λ©΄ λ‹€μŒκ³Ό 같은 상황이 λ°œμƒν•œλ‹€.
    • http://www.gitflow.org/user (성곡)
    • httsp://www.gitflow.org (μ‹€νŒ¨ - ν”„λ‘œν† μ½œ 상이)
    • http://www.gitflow.org:8080 (μ‹€νŒ¨ - 포트 상이)
    • http://blog.gitflow.org (μ‹€νŒ¨ - 호슀트 상이)

CORS

κ·Έλž˜μ„œ 이λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ λΈŒλΌμš°μ € μΈ‘μ—μ„œ JSONP λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜, μ„œλ²„ μΈ‘μ—μ„œ CORSλ₯Ό μ΄μš©ν•˜μ—¬ ν•΄κ²°ν•  수 μžˆλ‹€.
μ—¬κΈ°μ„œ CORS(Cross-Origin Resource Sharing) λž€, μ›Ή μ„œλ²„ 도메인 κ°„ μ•‘μ„ΈμŠ€ μ œμ–΄ κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ λ³΄μ•ˆ 도메인 κ°„ 데이터 전솑을 κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€.

CORS λ™μž‘ κ³Όμ •

  1. pre-flight : μ‹€μ œ μš”μ²­ν•˜λ €λŠ” κ²½λ‘œμ™€ 같은 URL 에 λŒ€ν•΄ OPTIONS 둜 μš”μ²­μ„ 날렀보고 μš”μ²­κ°€λŠ₯ν•œμ§€ 확인
  2. μ‹€μ œ μš”μ²­

Spring Boot μ—μ„œ ν™œμš©ν•˜κΈ°

μš°μ„  μ„œλ²„μ—μ„œλŠ” λΈŒλΌμš°μ €μ— λ‹€μŒκ³Ό 같은 ν‚€λ₯Ό header에 λ³΄λ‚΄μ€˜μ•Ό ν•œλ‹€.

  • Access-Control-Allow-Origin : μš”μ²­μ„ λ³΄λ‚΄λŠ” νŽ˜μ΄μ§€μ˜ 좜처 (*, 도메인)
  • Access-Control-Allow-Methods : μš”μ²­μ„ ν—ˆμš©ν•˜λŠ” λ©”μ†Œλ“œ (DEFAULT: GET, POST, HEAD)
  • Acess-Control-Max-Age : ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ pre-flight 의 μš”μ²­ κ²°κ³Όλ₯Ό μ €μž₯ν•  μ‹œκ°„ μ§€μ • (ν•΄λ‹Ή μ‹œκ°„ λ™μ•ˆμ€ pre-flight λ₯Ό λ‹€μ‹œ μš”μ²­ν•˜μ§€ μ•ŠλŠ”λ‹€.)
  • Access-Control-Allow-Headers : μš”μ²­μ„ ν—ˆμš©ν•˜λŠ” 헀더

그리고 Spring κ³Ό Spring Boot μ—μ„œλŠ” λ‹€μŒ 2κ°€μ§€ λ°©λ²•μœΌλ‘œ CORS λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€.

  • Controller μ§€μ • κ°œλ³„μ μœΌλ‘œ ν—ˆμš©ν•˜λŠ” λ°©λ²•μœΌλ‘œλŠ” @CrossOrigin을 μ‚¬μš©ν•˜λŠ” 것이닀.
    CrossOrigin_Controller

  • Global ν•˜κ²Œ μ§€μ • WebMvcConfigurerλ₯Ό κ΅¬ν˜„ν•˜κ±°λ‚˜ λ‹€μŒκ³Ό 같이 @Bean으둜 λ“±λ‘ν•˜μ—¬ addCorsMappings에 μ›ν•˜λŠ” path λ₯Ό μΆ”κ°€ν•˜λ©΄ λœλ‹€.
    WebMvcConfigurer