๐ฅ ๋ฌธ์
EC2 ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ชฝ์ ๋ฐฐํฌํ๊ณ ํด๋น ec2 DNS ์ฃผ์๋ก ํ๋ก ํธ ์ชฝ ๋ก์ปฌ์์ ์์ฒญ ๋ณด๋ด๋๋ฐ ์๋์ ๊ฐ์ CORS ์๋ฌ๊ฐ ๋ฌ๋ค !!
Access to XMLHttpRequest at 'server์ชฝ ์ฃผ์' from origin 'client์ชฝ ์ถ์' 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.
๋ถ๋ช
์ฝ๋ ๋ด์ WebConfig ํด๋์ค
๋ก CORS ์ค์ ๋ ํด์ฃผ๊ณ , SecurityConfiguration ํด๋์ค
์์๋ ํด์ฃผ์์ํ
๋ฐ ์ ๊ทธ๋ฌ์ง?? ์ถ์๋ค.
์ฝ๋๋ฅผ ํ์ธํด๋ณด๋ ์ฌ์ค ๋ณด๋ฉด์๋ ๋ญ๊ฐ ๋ฌธ์ ์ธ์ง ๋ชฐ๋ผ์ ๋์์ ์์ฒญํ๋ค!!
๋ค๋ฅธ ๋ถ์ด ํ์ ๋ฐฉ๋ฒ ์ค์ ์ ํด๊ฒฐ๋์๋ค๋ ์์๊ฐ ์์ด์
WebConfig ๋ถ๋ถ์ด ์๋๋ ๊ฒ ๊ฐ์์ ๋ชจ๋ ์ฃผ์์ฒ๋ฆฌ๋ฅผ ํ๊ณ SecurityCorsConfig ํด๋์ค
๋ฅผ ์๋์ ๊ฐ์ด ๋ฐ๋ก ๋ง๋ค์ด ์ฃผ์๋ค!
@Configuration
@RequiredArgsConstructor
public class SecurityCorsConfig {
โ โ
@Bean
public CorsFilter corsFilter(){
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOriginPattern("http://43.201.34.152:8080"); //ํน์ ํจํด Origin๋ง ํ์ฉ
config.addAllowedOriginPattern("http://localhost:3000");
config.addAllowedHeader(""); //ํน์ header๋ง ํ์ฉ
config.addAllowedMethod(""); //ํน์ ๋ฉ์๋๋ง ํ์ฉ
config.addExposedHeader("Authorization");
// config.addExposedHeader("*"); //์ถ๊ฐํค๋,์ปค์คํ
ํค๋๋ฅผ ์ง์
source.registerCorsConfiguration("/**", config); //corsConfiguration์ผ๋ก ๋ฑ๋ก
โ โ
return new CorsFilter(source);
}
}
๊ทธ๋ฆฌ๊ณ CorsFilter๋ฅผ SecurityConfiguration ์์ DI ๋ฐ๊ณ
๋งจ ๋ฐ์ ํํฐ๋ฅผ ์ถ๊ฐํด์ฃผ๋ ๋ถ๋ถ์ .add(corsfilter)
์ด๋ ๊ฒ ์ถ๊ฐํด์ฃผ์๋ค.
์ด๋ ๊ฒ ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์ ์คํ์ํค๊ณ ํ๋ก ํธ ๋ถ๋ค๊ป ๋ค์ ํ
์คํธ ํด๋ด๋ฌ๋ผ๊ณ ํ๋๋....
๊ธฐ๋๋ฅผ ํ์์ง๋ง ์คํจ..
๊ฑฐ์ ํ 4-5์๊ฐ ์ธ์ํ๋ค๊ฐ ๊ฒฐ๊ตญ์ ํด๊ฒฐํ๋๋ฐ
๐ก ์์ธ
์์ธ์ ๊ฝค ๋ณตํฉ์ ์ด์๋ค..!!
1.
SecurityConfiguration ํด๋์ค ๋ด์ .headers().frameOptions().disable() ์ค์ ์ด ์๋๋ฐ,
์ฌ๊ธฐ ๋งจ ๋ค .disable()๊ฐ .sameOrigin()์ผ๋ก ๋์ด ์์ด์ ๊ฐ์ Origin๋ง ํ์ฉํ๋๋ก ๋์ด์์๊ณ !
2.
WebConfig ํด๋์ค ๋ด์ @Override ๊ฐ ๋ถ์ ๋ฉ์๋๊ฐ ํ๋ ์์๋๋ฐ,
๊ทธ๊ฒ๋๋ฌธ์ ์ค์ ์ ํด์ค๋ ๋ฎ์ด ์์์ ธ์ ์ค์ ์ด ์๋ฌด๊ฒ๋ ์๋๋ ๊ฒ !!! ใ ใ
๊ฝค ์จ๋ฆํ๋ค๊ฐ.. ๋ค๋ฅธ ๋ถ์ด ์ฝ๋๋ฅผ ํ๋ํ๋ ๋ฏ์ด ๋ด์ฃผ์๊ณ ์์๋ค..!! ๊ฐฌ๋
โ๏ธ ํด๊ฒฐ
์ผ๋จ CORS ์๋ฌ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋๋ฐ,
์ดํ์ ์ถ๊ฐํ๋ SecurityCorsConfig
๋ก ๊ตณ์ด ์ํด๋ ๋๊ณ ์๋ ์ฌ์ฉํ๋ WebConfig
๋ก ํด๊ฒฐํ ์ ์๋ค๊ณ ํ๋ค!!
๊ทธ๋์ SecurityCorsConfig
๋ ์ง์ฐ๊ณ WebConfig
๋ฅผ ์๋์ ๊ฐ์ด ์ค์ ํ์๋ค !
@Configuration
public class WebConfig implements WebMvcConfigurer {
โ โ
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*") // ์์ ํด๋น ์ฃผ์๋ฅผ ๋ฃ์ด๋ ๋จ
.allowedHeaders("*")
.allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS" , "PATCH")
.exposedHeaders("Authorization", "RefreshToken");
//.allowCredentials(true); // .allowedOriginPatterns("*") ์ด๋ ๊ฒ ์์ผ๋ ์นด๋๋ก ์ค์ ํ๋ฉด ์ด๊ฑฐ ์ฐ๋ฉด ์๋ฌ๋จ ( ์คํ ์กฐ์ฐจ X )
}
};
}
}
์ด๋ ๊ฒ ์ค์ ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌ ์๋ฒ์์ ๋๋ฆฐ ํ์ ๋ค์ ํ๋ก ํธ ์ชฝ์์ ์์ฒญ์ ๋ณด๋ด๋ฉด
CORS ์๋ฌ๊ฐ ์ฌ๋ผ์ง ๊ฒ์ ํ์ธํ ์ ์๋ค !!!!!!!!!
๐ฏ ๊ฟํ
๊ทธ๋ฆฌ๊ณ ์ด๊ฑฐ ํ๋ฉด์ ์๊ฒ๋ ๊ฟํ์ธ๋ฐ, ๊ตณ์ด ํ๋ก ํธ ๋ถ๋ค๊ป ํ์ธํ์ง ์๊ณ
๋ด ๋ก์ปฌ์์ CORS ์๋ฌ๊ฐ ๋๋์ง ํ์ธํ ์ ์๋ ๋ฐฉ๋ฒ !!!
์ง์ง ์ ๋ ์นด๋ค ์ด๊ฑด
Postman์ผ๋ก ํ
์คํธ๋ฅผ ํด๋ณผ ๋ Headers์ Origin์ ์๋์ ๊ฐ์ด ์ถ๊ฐํด์ฃผ๊ณ ์ด๋์ ์์ฒญ์ด ์ค๋์ง ์ถ๊ฐํด์ฃผ๋ฉด
( ๋์ ๊ฒฝ์ฐ ํ๋ก ํธ ์ชฝ ๋ก์ปฌ localhost:3000
์ด์๋ค. )
ํด๋น ์๋ฒ ์ฃผ์๋ก ์์ฒญ์ ๋ณด๋์ ๋ CORS ์๋ฌ๊ฐ ๋๋์ง ๊ฒฐ๊ณผ๋ก ํ์ธํ ์ ์๋ค๊ณ ํ๋ค !!!
์๋ฌ๊ฐ ๋๋ค๋ฉด Invalid CORS ์ด์ฉ๊ตฌ ํ๋ฉด์ ์๋ต์ด ์ค์ง ์๊ณ ,
( ์บก์ณ๋ฅผ ๋ชปํ๋ค ใ
)
์๋ฌ๊ฐ ๋์ง ์๋๋ค๋ฉด ํด๋น ์์ฒญ์ ๋ํ ์๋ต์ด ์ ์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค !
( ๋ณธ ๊ฒ์๋ฌผ์ 2022/12/30์ ์์ฑํ ๊ธ์ ์ฎ๊ธด ๊ธ์ ๋๋ค. ์๋ฌธ์ ์๊ธฐ์ ์์! )