2017-02-08 5 views
4

Я устанавливаю мой заголовок и HTTP вызов, как это:Угловое 2 HTTP не устанавливая заголовок

var headers = new Headers(); 
headers.set('Authorization','Bearer xxxxxxxxxxx'); 

this.http.get('http://localhost:8080/outputEndpoints', { 
    headers: headers 
}). 
map(res => res.text()) 

.subscribe(
    data=> console.log(data), 
    error=> console.log("Getting Error") 
); 

С этим я ожидал заголовок быть:

Accept:*/* 
Accept-Encoding:gzip, deflate, sdch, br 
Accept-Language:es,ca;q=0.8,en-GB;q=0.6,en;q=0.4,fr;q=0.2 
Access-Control-Request-Headers:authorization, content-type 
Authorization: "Bearer xxxxxxxxxxxx" 
Access-Control-Request-Method:GET 
Connection:keep-alive 
Host:localhost:8080 
Origin:http://localhost:3000 
Referer:http://localhost:3000/ 
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 

Вместо этого я не получаю следующее (без авторизации в знак):

Accept:*/* 
Accept-Encoding:gzip, deflate, sdch, br 
Accept-Language:es,ca;q=0.8,en-GB;q=0.6,en;q=0.4,fr;q=0.2 
Access-Control-Request-Headers:authorization, content-type 
Access-Control-Request-Method:GET 
Connection:keep-alive 
Host:localhost:8080 
Origin:http://localhost:3000 
Referer:http://localhost:3000/ 
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 

EDIT:

Общая информация является:

Request URL:http://localhost:8080/outputEndpoints 
Request Method:OPTIONS 
Status Code:401 
Remote Address:[::1]:8080 

Так Парам.вызовов не удается. В других приложениях, как только вызов OPTIONS принят, он делает запрос GET, где вы можете установить установленный токен аутентификации. Это означает, что по какой-то причине вызов OPTION не принимается.

При совершении звонков с помощью CURL или SOAP UI он работает нормально, поэтому я полагаю, что это не проблема с CORS. Я не ошибаюсь?

Любая идея или руководство было бы действительно полезно.

+0

вы нашли решение? здесь проблема – stackdave

ответ

0

После этого руководство http://restlet.com/blog/2015/12/15/understanding-and-using-cors/ вы можете прочитать следующее:

Важное замечание. Вы должны учесть, что при выполнении запроса CORS, содержащего защиту, то есть заголовок авторизации, запрос OPTIONS не будет содержать его. Поэтому вам нужно быть осторожным в отношении безопасности при обращении к первым запросам OPTIONS предполетных. На самом деле проверка аутентификации не может быть выполнена на этом уровне .

Таким образом, заголовок авторизации в первом вызове OPTION отсутствует.

+0

но как вы его решили? вы можете показать код ?, я получаю ошибку с моего сервера, а не от почтальона или завитка, только с угловым 4.1.2 – stackdave

+0

api programmer сказал мне, что OPTIONS должен иметь код авторизации, поэтому api работает так, но мой браузер не отправляет ОПЦИИ с auth, как заставить мой браузер сделать это? – stackdave

+0

Если авторизация jwt отсутствует, она отправит обычный запрос без ВАРИАНТОВ – ZanattMan

1

Я думаю, это headers.append, а не headers.set. Попытайтесь изменить свой метод и посмотреть, работает ли он.

+0

Я пробовал и то, и другое из них работает. При печати опции заголовка она выглядит нормально, но когда я проверяю ее на вкладке в сети, ее нет. – ZanattMan

1

Вы должны либо установить значение в конструкторе заголовка, как это:

var headers = new Headers({'Authorization', 'Bearer XXXXXXX'}); 

или вы должны использовать метод на добавление:

var headers = new Headers(); 
headers.append('Authorization', 'Bearer XXXXXX'); 

ред из-за изменившейся вопрос:

Поскольку я действительно не знаю, как вы обрабатываете свой запрос, я могу показать вам решение, которое я придумал в моем бэкэнд-источнике:

if ("OPTIONS".equals(request.method, ignoreCase = true)) { 
    response.status = HttpServletResponse.SC_OK 
} else { 
    chain.doFilter(req, res) 
} 

Таким образом, на вашем сервере вы должны проверить метод запроса, и если он равен «ОПЦИЯМ», чем вы можете установить статус ответа на 200, и все будет готово.

+0

Я использовал все известные способы (конструктор, добавление и набор), и никто из них не работает. При печати заголовка в консоли он работает нормально, но на вкладке навигации нет заголовка авторизации (как показано на консоли) – ZanattMan

+0

Как я уже сказал в этом вопросе, это не происходит через вызов OPTIONS, но правильно настроен заголовок. Тогда проблема в том, почему в первом вызове OPTIONS не работает. – ZanattMan

0

Добавьте эту строку в конфигурации системы безопасности:

.antMatchers(HttpMethod.OPTIONS,"/**").permitAll()