SpringBoot2. x 설정 Cors 크로스 도 메 인 상세 설명
7231 단어 자바 프레임 워 크
크로스 도 메 인 이란 브 라 우 저 A 가 서버 B 에서 가 져 온 정적 자원 으로 Html, Css, Js 를 포함 하고 Js 에서 Ajax 를 통 해 C 서버 의 정적 자원 이나 요청 을 방문 하 는 것 을 말한다.즉, 브 라 우 저 A 가 B 서버 에서 가 져 온 자원, 자원 에서 서버 C 의 자원 에 접근 하고 싶 습 니 다.같은 소스 정책 이란 브 라 우 저 A 가 서버 B 에서 가 져 온 정적 자원 으로 Html, Css, Js 를 포함 하여 사용자 안전 을 위해 브 라 우 저 에 제한 을 가 합 니 다. 그 중의 Js 는 Ajax 를 통 해 B 서버 의 정적 자원 이나 요청 에 만 접근 할 수 있 습 니 다.즉, 브 라 우 저 A 는 자원 을 어디서 가 져 오 면 자원 에 만 접근 할 수 있 습 니 다.같은 소스 란 같은 요청 프로 토 콜 (예 를 들 어 Http 또는 Https), 같은 Ip, 같은 포트, 세 개가 모두 같 으 면 같은 소스 입 니 다.
크로스 필드 처리
도 메 인 을 뛰 어 넘 는 이러한 수요 가 있 기 때문에 W3C 조직 은 크로스 - Origin Resource Sharing 규범 을 제 정 했 고 Cors 라 고 간략하게 썼 다. 현재 이 규범 은 대부분의 브 라 우 저 에 의 해 지원 되 어 도 메 인 을 뛰 어 넘 는 수 요 를 처리 하고 있다.Cors 는 백 엔 드 애플 리 케 이 션 에서 설정 해 야 하기 때문에 도 메 인 을 뛰 어 넘 는 백 엔 드 처리 방식 입 니 다. 이렇게 하면 이해 하기 쉽 습 니 다. 모 르 는 소스 가 응용 프로그램 에 접근 하려 면 당연히 응용 권한 을 부여 해 야 합 니 다.백 엔 드 처리 방식 을 제외 하고 전단 의 해결 방안 도 있 습 니 다. 예 를 들 어 JSONP, 여기 서 우 리 는 주로 SpringBoot2. x 가 Cors 에 대한 설정 을 설명 하기 때문에 전단 해결 방안 에 대해 상세 하 게 설명 하지 않 습 니 다.
크로스 필드 의 분류
크로스 도 메 인 은 다음 과 같은 3 가지 로 나 뉜 다.
명칭.
영문
설명 하 다.
간단 한 요청
Simple Request
시 작 된 Http 요청 은 다음 과 같 습 니 다. 1. 사용자 정의 요청 헤더 가 없습니다. 2. 요청 동 사 는 GET, HEAD 또는 POST 중 하나 입 니 다. 3. 동사 가 POST 일 때 Content - Type 은 application / x - ww - form - urlencoded 입 니 다.
multipart / form - data 또는 text / plain 중 하나
예비 검사 요청
Preflighted Request
시 작 된 Http 요청 은 그 중 하나 에 부합 합 니 다. 1. 사용자 정의 요청 헤더 가 포함 되 어 있 습 니 다. 2. 요청 동 사 는 GET, HEAD 또는 POST 가 아 닙 니 다. 3. 동사 가 POST 일 때 Content - Type 은 application / x - ww - form - urlencoded 가 아 닙 니 다.
multipart / form - data 또는 text / plain.즉, 간단 한 요청 의 반대
증빙 요청
Requests with Credential
발 표 된 Http 요청 에 증빙서류 가 있 습 니 다.
SpringBoot2. x 설정 코드
SpringBoot 2. x 는 주로 두 가지 방식 으로 Cors 를 지원 합 니 다. 다음 과 같 습 니 다.
방식.
작용 범위
설명 하 다.
@ CrossOrigin 주해
컨트롤 러 의 모든 인터페이스 나 특정한 인터페이스
특정 요청 인터페이스 설정, 맞 춤 형
WebMvcConfigurer 대상
모든 인터페이스
전역 설정 에 적용
@ CrossOrigin 주석 사용 하기
코드 인 스 턴 스
@RestController
@RequestMapping(value = "/api/users")
@CrossOrigin
public class UsersController{
@Autowired
private UsersService usersService;
@PostMapping
@CrossOrigin
public User create(@RequestBody User user) {
return userService.save(user);
}
}
명칭.
유형
범위.
필수
요청 헤더 필드
value
문자열 배열
방법
예.
Access-Control-Allow-Origin
origins
문자열 배열
방법
예, 같은 value 입 니 다. 둘 중 하 나 를 선택 할 수 있 습 니 다.
Access-Control-Allow-Origin
methods
문자열 배열
클래스 또는 인터페이스
예.
Access-Control-Allow-Methods
maxAge
long
클래스 또는 인터페이스
아니.
Access-Control-Max-Age
allowCredentials
String
클래스 또는 인터페이스
아니.
Access-Control-Allow-Credentials
allowedHeaders
문자열 배열
클래스 또는 인터페이스
아니.
Access-Control-Request-Headers
exposedHeaders
문자열 배열
클래스 또는 인터페이스
아니.
Access-Control-Expose-Headers
그 중에서 @ CrossOrigin 주 해 는 다음 과 같은 매개 변수 설명 을 사용 할 수 있 습 니 다.
WebMvcConfigure 대상 사용 하기
코드 인 스 턴 스
@Configuration
public class MyConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/ (server:
servlet:
context-path:)/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT","PATCH")
.maxAge(3600);
}
};
}
}
그 중에서 해당 하 는 방법 을 통 해 크로스 도 메 인 요청 설정 을 실현 합 니 다.
방법 류
방법 이름
필수
요청 헤더 필드
설명 하 다.
CorsRegistry
addMapping
예.
무, 비 Cors 속성,
SpringBoot 설정 에 속 합 니 다.
크로스 도 메 인 지원 경로 설정
CorsRegistration
allowedOrigins
예.
Access-Control-Allow-Origin
허용 되 는 원본 설정
CorsRegistration
allowedMethods
예.
Access-Control-Allow-Methods
GET, POST 등 도 메 인 간 요청 을 지원 하 는 방법 을 설정 합 니 다.
CorsRegistration
maxAge
아니.
Access-Control-Max-Age
사전 검사 요청 의 유효 시간 설정
CorsRegistration
allowCredentials
아니.
Access-Control-Allow-Credentials
증빙 요청 에 사용 할 쿠키 발송 허용 여부 설정
CorsRegistration
allowedHeaders
아니.
Access-Control-Request-Headers
사용자 정의 요청 헤 더 를 설정 하여 미리 검사 요청 에 사용 합 니 다.
CorsRegistration
exposedHeaders
아니.
Access-Control-Expose-Headers
응답 하 는 헤더 정 보 를 설정 합 니 다. 다른 헤더 정 보 를 설정 할 수 있 습 니 다.