Ошибка CORS в браузере в приложении Angular

#javascript #angular #spring #jakarta-ee #cors

#javascript #angular #весна #джакарта-ee #cors

Вопрос:

Привет, сообщество разработчиков, я получаю доступ к RESTful API (написанному в Spring Hibernate) с клиента Angular 6. Когда я запускаю угловой слой из своего локального, я продолжаю получать CORS эту ошибку:

«Доступ к XMLHttpRequest в ‘http:///SpringDemoSecurity/login » из источника «http://localhost:4200 «заблокирован политикой CORS: ответ на предполетный запрос не проходит проверку контроля доступа: у него нет статуса HTTP ok «. Я добавил заголовки Allow-Access- * в свой ответ с Java layer, но никакой помощи. Я вижу эти заголовки в своем ответе от приложения postman. Я не могу избавиться от этих ошибок в своем браузере.

Последовал за многими потоками в stack overflow и в других местах, чтобы добавить все заголовки в объекты запросов и ответов и проверил их наличие с помощью клиентского приложения Postman REST, но бесполезно. Уровень Java — это экземпляр AWS EC2, в то время как Angular работает на локальном компьютере.

Ниже приведен фрагмент кода Java в моем классе Filter:

 response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Max-Age", "864000");
response.addHeader("Access-Control-Allow-Methods", "GET, OPTIONS, HEAD, PUT, POST, PATCH, DELETE");
response.addHeader("Access-Control-Allow-Headers", "X-Requested-With,content-type,authorization,token");
response.addHeader("Access-Control-Allow-Credentials", "true");
// For HTTP OPTIONS verb/method reply with ACCEPTED status code -- per CORS handshake
        if (request.getMethod().equals("OPTIONS")) {
            response.setStatus(HttpServletResponse.SC_ACCEPTED);
            return;
        }
  

Я не могу понять это. Пробовал много вещей при переполнении стека.
Любая помощь по этому вопросу высоко ценится.
— Swati

Комментарии:

1. пожалуйста, следуйте этому руководству howtodoinjava.com/spring5/webmvc/spring-mvc-cors-configuration

Ответ №1:

После получения OPTIONS methoud в настоящее время вы отвечаете с помощью HttpServletResponse.SC_ACCEPTED, что означает код ответа 202. Вам нужно отправить код 200 (HttpServletResponse.SC_OK). Проверьте это.

Ответ №2:

Используйте для этого метод прокси в angular 6. Вы должны создать файл proxyconfig.json в корне приложения angular. Вы можете следить за этим видео- CORS в Angular 6

Или это может быть решено в серверной части также во время создания API.

Ответ №3:

источник CORS является заблокированным браузером, и на серверной части ничего не нужно делать, чтобы разрешить это. Есть 2 способа избежать:

1) Если вы используете json, попробуйте использовать JSONP

2) (что я сделал здесь) Преобразуйте свой серверный сервер для приема подключений к Websocket. websocket разрешает доступ к другому источнику. Адрес вашего серверного сервера будет выглядеть как ws:// localhost:4200.

Я надеюсь на помощь 🙂