COCO 프로젝트 중에 CORS 처리한 것을 수정하다가 알게 된 것이 있어서 적는당
| WebConfig.java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowedMethods("*")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3000);
}
}
기존에 우리 프로젝트의 CORS 설정한 부분이다.
.allowedOriginPatterns("*")
로 인해 모든 도메인에 대해서 접근이 열려있는 것을 확인할 수 있다.
.allowedOriginPatterns()
에 허용할 도메인을 기입하는 것으로 변경했다| WebConfig.java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("https://www.cocoding.xyz")
.allowedMethods("*")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3000);
}
}
https://www.cocoding.xyz
에만 자원 공유를 허락하도록 했다.현재 우리 프로젝트는 Security도 사용하고 있으므로, Security에서도 CORS 설정을 허용해야 한다.
| SecurityConfiguration.java
@Override
protected void configure(HttpSecurity http) throws Exception {
...
http.cors(); // cors 허용
...
}
// Security에서 CORS 허용
@Bean
public CorsConfigurationSource corsConfigurationSource() {
final CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(List.of("https://www.cocoding.xyz"));
configuration.addAllowedHeader("*");
configuration.addAllowedMethod("*");
configuration.setAllowCredentials(true);
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}