일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- RabbitMQ
- 리팩토링
- 비동기
- gdg
- spring boot
- OAuth
- JPA
- clean code
- JWT
- 시큐리티
- assertj
- GC
- 클린코드
- jvm
- oauth2
- Producer
- 스프링부트
- 페이징
- 권한
- apache
- load balancing
- 스프링
- 스프링 부트
- tomcat
- Spring
- Security
- Refactoring
- java
- 페이스북
- g1
Archives
- Today
- Total
허원철의 개발 블로그
Spring Boot - CORS 본문
이번 글은 Spring Boot를 이용하여 CORS를 해보는 예제 글 입니다.
보안상의 이유로 브라우저는 스크립트 내에서 시작된 교착 출처 HTTP 요청을 제한하는데, 이를 SOP라 합니다.
※ SOP(Same-Origin Policy) : 동일 출처 정책, 한 출처(origin)에서 로드된 문서나 스크립트가 다른 출처 자원과 상호작용하지 못하도록 하는 제약입니다.
SOP는 두 Origin 간에 프로토콜, 포트, 호스트가 같아야 동일 Origin라고 할 수 있습니다.
예를 들어, http://www.heowc.com 이라는 URL이 있다면
1 2 3 4 | http://www.heowc.com/user [성공] https://www.heowc.com [실패] - 프로토콜 상이 http://www.heowc.com:8080/ [실패] - 포트 상이 http://blog.heowc.com [실패] - 호스트 상이 | cs |
브라우저 스크립트에서는 jsoup라는 것을 사용하거나 서버에서는 CORS를 이용하여 해결 가능합니다.
※ CORS(Cross-Origin Resource Sharing) : 웹 서버 도메인간 액세스 제어 기능을 제공하여 보안 도메인간 데이터 전송을 가능하게 해줍니다.
동작과정
1. pre-flight request : 실제 요청하려는 경로와 같은 URL에 대해 OPTIONS메소드로 요청을 날려보고 요청가능한지 확인
2. 실제 요청
서버에서는 다음과 같은 설정을 추가해줘야 합니다.
1 2 3 4 5 | Access-Control-Allow-Orgin : 요청을 보내는 페이지의 출처 [ *, 도메인 ] Access-Control-Allow-Methods : 요청을 허용하는 메소드. Default : GET, POST, HEAD Access-Control-Max-Age : 클라이언트에서 preflight의 요청 결과를 저장할 시간 지정. 해당 시간 동안은 pre-flight를 다시 요청하지 않는다. Access-Control-Allow-Headers : 요청을 허용하는 헤더 ... | cs |
Spring Boot에서 활용 해보기
Spring에서 기존에는 Filter를 이용하여 CORS를 허용하였으나, Spring 4.2 이후 버전에서는 @CrossOrigin을 이용하여 쉽게 해결할 수 있습니다. @CrossOrigin은 해당 레벨에 HTTP 메소드를 허용하게 해줍니다.
1) @CrossOrigin 설정
1 2 3 4 5 | @CrossOrigin @GetMapping("{value}") public String get(@PathVariable String value) { return value; } | cs |
2) Global CORS 설정
1 2 3 4 5 6 7 8 | @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/message/**") .allowedOrigins("*") .allowedMethods("POST") .allowCredentials(false) .maxAge(3600); } | cs |
※ @CrosOrigin과 Global CORS는 같이 사용이 가능합니다.
참고
'web' 카테고리의 다른 글
Reflow와 Repaint (394) | 2017.11.06 |
---|---|
책 '토비의 스프링 3.1' 후기 (405) | 2017.09.12 |
Spring Boot - Async 제대로 사용하기 (407) | 2017.05.18 |
Spring Boot - Excel Upload & Download (418) | 2017.05.05 |
Spring Boot - Data JPA & ModelMapper (414) | 2017.04.30 |
Comments