a15714ab041eb360be3335625683746f00534429d6a6ed89d73666f29815cd6ea6c274b216e13f818b0e7ffc



a15714ab041eb360be3335625683746f00534429d6a6ed89d73666f99d17cd6e6807f53d564bac5d08a5d8209e


위 두 코드는 모두 스프링 필터체인에서 돌아가는 한 필터에 포함된 코드인데,

return을 통해 필터체인을 벗어남과 동시에 프론트엔드로 401 에러를 넘겨주기 위해 작성한 코드입니다.


첫번째의 sendError의 경우엔 제가 의도한 대로 401 error가 담긴 response가 잘 전달돼요.


그러나 두번째의 경우엔 제가 의도한대로 동작하지 않고 response가 브라우저로 넘어가는 과정에서 CORS 에러가 발생됩니다.

이의 해결책은 필터 내부에 아래와같이 헤더를 일일이 설정해주는 겁니다. 그러면 마찬가지로 잘 동작하게 돼요.

a15714ab041eb360be3335625683746f00534429d6a6ed89d73667f09f11cd6e712297ccdd26103c07879b4148



저는 여기서 궁금한게 두가지가 있습니다.


1. cors 에러가 발생하는 이유는 프론트에서 서버로 preflight request를 전송했을때 이 request에 대한 올바른 응답을 내놓지 못해서라고 알고있는데,

서버에서 위 사진과 같이 모든 응답의 헤더를 설정해줘야하는 이유가 뭔가요?

(preflight 요청은 이 필터를 거치지 않습니다.)


2. 첫번째의 sendError()와 두번째의 flushBuffer()은 어떤차이가 있길래 sendError()은 CORS관련 헤더를 설정해주지 않고도 잘 동작했나요?




해결하는데 엄청 오래걸렸는데 정작 해결된 이유를 모르니 미칠 것 같습니다 선생님들 도와주십쇼 ㅠ