현재 Spring 을 API서버로 사용하고 있다. Controller의 각 Request Mapping된 로직으로 들어가기 전에, Token을 확인하는 Interceptor를 구현하여 사용하고 있다. Frontend 에서는 javascript가 JQuery의 Ajax로 API 서버에 요청을 보낸다.



// JAVA Interceptor 중 어떤 에러가 발생 되었을때

response.setStatus(401);

return false;




그런데 이럴 경우 해당 response는 text/html 방식으로 프론트에 전달되게 되고, 




// javascript

error: function(xhr){
    console.log(xhr);
},





Xhr은 Status code가 0으로 찍히게 된다.  




이 때 해결 방법은 response의 Header까지 인터셉터 단에서 모두 입력해주어야 하는데 

“Access-Control-Allow-Origin” 에 해당 Request를 요청한 곳의 주소가 들어가야 한다.





// New Java Interceptor

response.setStatus(401);
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Connection", "close");
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
return false;





이렇게 바꿈으로써 해결되었다. 아마 CORS 관련해서 문제가 생긴듯 싶다. 



+ Recent posts