Spring Boot

[Spring Boot] CORS Configuration 설정하기

DEV_HEO 2023. 6. 23. 13:47
320x100

CORS 설정하는 방법에는 여러가지가 있는데,

서버에서 설정하는 법과 클라이언트에서 설정하는 법 중 서버에서 설정하는 게 표준이라고 한다.

 

서버에서 설정하는 방법 중

내가 선호하는 CORS 설정법은 Configuration 설정 파일을 만드는 것이다.

 


서버 url은 localhost:8080

클라이언트 url은 localhost:3000 이라고 가정한다.

 

 


application.yml

cors:
  allow:
    origins: http://localhost:3000

다음과 같이 cors 설정해줄 클라이언트 url을 적어준다.

꼭 cors.allow.origins 로 안해줘도 된다.


Configuration 파일 생성

@Configuration
public class WebConfig implements WebMvcConfigurer {
	
	@Value("${cors.allow.origins}")
	private String[] corsAllowOrigins;
	
	@Override
	public void addCorsMappings(CorsRegistry registry) {
    	registry.addMapping("/api/**")
                .allowedOrigins(corsAllowOrigins)
                .allowedMethods("HEAD", "OPTIONS", "GET", "POST", "PUT", "PATCH", "DELETE")
                .allowCredentials(true);
	}
}

 

상단에 application.yml 에 추가한 cors.allow.origins를 불러오고

 

addCorsMappings 메소드를 오버라이딩한다.

 

- addMapping : CORS를 적용할 URL패턴을 정의

- allowedOrigins : 자원 공유를 허락할 Origin을 지정(클라이언트 서버인 localhost:3000)

         : application.yml 에 cors.allow.origins를 등록해서 불러오는 방법 말고 
           직접 "http//localhost:3000"으로 지정해도 됨

- allowedMethods : 허용할 HTTP method를 지정

- allowCredentails : 쿠키 요청을 허용한다(다른 도메인 서버에 인증하는 경우에만 사용해야하며, true 설정시 보안상 이슈가 발생할 수 있다)

- maxAge :  preflight 요청에 대한 응답을 브라우저에서 캐싱하는 시간

 

 

+) addAllOrigin("*")  .allowCrededentials(true) 를 동시에 사용할 경우 에러가 난다고 한다.

allowCredential이 true라면 “Access-Control-Allow-Origin” 응답 헤더헤더를 설정 할 수 없기 때문에 특수 값인 "*"를 사용 못하는 것이다.

이럴 때 해결방법은 특정 주소만 허락하거나, addAllOrigin("*") 대신 .addAllOriginPatterns("*")를 사용하면 되는 것.

320x100