반응형
브라우저에서 API서버와 통신 중에 다음과 같은 메세지가 발생하였습니다.
Access to XMLHttpRequest at '...' from origin
'http://localhost:3000' has been blocked by CORS policy: Response to preflight
request doesn't pass access control check: No 'Access-Control-Allow-Origin' header
is present on the requested resource.
same origin policy에 의해서 프로토콜, 포트번호, 호스트가 다르면 요청에 대한 응답을 브라우저에서 받을 수 없었습니다.
서로 다른 origin간에도 요청을 주고받을 수 있도록 한 것이 CORS(Cross origin resource sharing)입니다.
다음과 같은 config파일을 작성해줍니다.
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:3000")
.allowedMethods("*") // 기타 설정
.allowedHeaders("*");
}
}
로컬에서 개발 중이므로 현재 프론트에 해당하는 주소를 적어주었습니다.
스프링 시큐리티를 사용 중일 경우, 스프링과 별개로 cors 설정을 해주어야합니다.
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors().and() // security cors 허용
...
}
}
스프링 시큐리티에서는 cors를 허용해주고, 스프링에서 cors설정을 해주었습니다.
스프링 시큐리티에서도 cors 설정을 하려면 다음과 같이 진행하면 됩니다.
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors().and() // security cors 허용
...
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
final CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(List.of("http://localhost:3000"));
configuration.addAllowedHeader("*");
configuration.addAllowedMethod("*");
configuration.setAllowCredentials(true);
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
}
반응형
'Spring' 카테고리의 다른 글
Spring에서 gson을 이용하여 중첩 구조 json 스트링을 객체로 변환 (0) | 2021.11.10 |
---|---|
An invalid character [32] was present in the Cookie value (0) | 2021.11.09 |
Argument(s) are different! Wanted: Actual invocations have different arguments: (0) | 2021.11.09 |
Spring Boot jwt 사용하기 access token, refresh token 발급 (4) | 2021.11.09 |
Docker 이용해서 Spring Boot, Redis, Mysql 배포하기 (0) | 2021.11.09 |