по-прежнему получает ошибку CORS после добавления аннотации @CrossOrigin - PullRequest
0 голосов
/ 10 февраля 2020

Я создаю простое веб-приложение с angular и весенней загрузкой, и я совершенно новичок в обеих этих платформах. Я пытаюсь сделать http GET запрос с angular HttpClient, но у меня возникает ошибка cors, подобная этой:

Access to XMLHttpRequest at 
'http://127.0.0.1:8080/api/employees/all' from origin 
'http://127.0.0.1:4200' has been blocked by CORS policy: 
Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

Я использую angular код, подобный этому:

  this.http.get('http://127.0.0.1:8080/api/employees/all')
  .subscribe(data => {
    console.log(JSON.stringify(data));
  });

но когда я начал сталкиваться с этой ошибкой, я изменил ее на:

  private httpOptions = {
headers: new HttpHeaders({
  'Content-Type': 'application/json',
})
};

this.httpOptions.headers.set('Authorization', 'Basic admin:admin123');
this.httpOptions.headers.set('Access-Control-Allow-Origin', '*');
this.httpOptions.headers.set('Access-Control-Allow-Method', 'GET, PUT, POST, DELETE, OPTIONS');
this.httpOptions.headers.set('Access-Control-Allow-Headers', 'Origin, Content-Type, X-Auth-Token');
this.http.get('http://127.0.0.1:8080/api/employees/all')
  .subscribe(data => {
    console.log(JSON.stringify(data));
  });

Однако это никак не повлияло. Я нашел несколько постов с похожими проблемами, в которых люди решили свою проблему, добавив аннотацию @CrossOrigin в код spring java, поэтому я также попробовал это:

@CrossOrigin
@GetMapping(path = "/employees/all") // class @RequestMapping is "/api"
public @ResponseBody Iterable<Employee> getAllEmployees() {
    System.out.println("endpoint reached");
    return employeeRepository.findAll();
}

, но это тоже не работает. Я продолжаю получать ту же ошибку. Я думаю, что я не совсем понимаю, откуда возникает проблема. Это проблема на стороне сервера или на стороне клиента? Также, как я могу это исправить?

Я ценю любую помощь в решении этой проблемы. Заранее спасибо.

1 Ответ

0 голосов
/ 10 февраля 2020

Это проблема на стороне сервера, простой, но небезопасный способ получения каждого вызова API с параметром Access-control-allow-origin, установленным на *. Если вам это действительно нужно, пока бэкэнд не будет исправлен, вы можете использовать расширение на chrome: https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf?hl=es

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...