본문 바로가기
Spring/spring boot

spring-react cors에러문제

by 내 멋대로 삶 2021. 12. 10.

스프링 시큐리티를 쓰고있는 상황에서 cros문제가 계속발생 했다.

 

1.글로벌 cors전략

@EnableWebMvc를 이용해 WebMvcConfigurer를상속 받아 CORS응답을 처리했다.

하지만 계속해서 POST요청에 관해서 CORS권한이 없는 에러가 발생했다.

Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

에러를 처리하지 못하고 시큐리티에서 PermitAll로 임시방편으로 작업을 위해 처리했다.

 

시큐리티가 먼저 처리된다는 힌트를 가지고 시큐리티에 맞는 CORS를 적용시켜야 한다는것을 알았다.

 

2. 시큐리티 filter가로채기

시큐리티가 cors보다 먼저 선행되어서 보안을 처리하는 점을 해결하기 위해 새로운 방법을 적용했다.

모든 포트를 열어두는 (*)를 적용시켰고, credential을 true로 했다.

 

Access-Control-Allow-Credentials: true를 사용하는 경우는 사용자 인증이 필요한 리소스 접근이 필요한 경우인데, 만약 Access-Control-Allow-Origin: *를 허용한다면, CSRF 공격에 매우 취약해져 악의적인 사용자가 인증이 필요한 리소스를 마음대로 접근할 수 있음.
출처: https://lovon.tistory.com/156 [Java 개발 블로그]

 

우리는 시큐리티와 jwt토큰을 사용함으로 인증이되고 작업의 편의성을 위해 *로 열어뒀을 뿐 추후에 변경예정이다.

시큐리티보다 먼저 처리 되기 위해 필터를 시큐리티 전에 실행한다는 것을 선언해줘야 한다.

이로써 우리의 에러는 처리가 되었다. 

 

첫번째 방법을 쓴다면 .cors()를시큐리티에 붙여야 한다는 것을 발견했다. 

스프링 시큐리티를 사용중이라면 WebSecurityConfigurerAdapter를 상속하는 클래스에서 configure를 재정의하여 cors()를 사용해야한다. 

선언하였다면 스프링 시큐리티에서는 스프링에 선언된 CORS구성을 활용하기 때문에 따로 CORS관련 필터를 정의할 필요가 없는 것 같다.

 

'Spring > spring boot' 카테고리의 다른 글

테스트 커버리지  (0) 2021.12.20
Spring-React CORS란?  (0) 2021.12.10
Spring JPA @Transactional 어노테이션  (0) 2021.12.04
Spring @Joinclumn JPA연관관계  (0) 2021.12.03
API-Web Sever  (0) 2021.11.29