Я создаю приложение Angular2 с Spring-MVC. Я добавил аутентификацию с помощью Spring Security, и когда я запрашиваю свой сервер REST с почтальоном, все в порядке. Когда я добавляю Authorization
в мой заголовок в Angular2, я получаю ошибку 401.Ошибка аутентификации Angular2 с 401
Ошибка: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access. The response had HTTP status code 401
сервис My Angular2:
@Injectable()
export class BookService {
headers = new Headers();
options = new RequestOptions({ headers: this.headers });
constructor(
private http: Http) {
this.headers.append('Content-Type', 'application/json');
this.headers.append('Authorization', 'Basic ' + btoa('nirgn:password'));
}
getBooksByCategory(categoryId: number) {
return this.http.get(environment.baseUrl + 'categories/' + categoryId + '/books', this.options)
.map((res: Response) => <Book[]>res.json()._embedded.books)
.catch(this.handleError);
}
}
Весной я позволяю все происхождения, как это: response.addHeader("Access-Control-Allow-Origin", "*");
(в CORSFilter implements Filter
класс).
Кроме того, я добавил проверку подлинности, как это:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().and().authorizeRequests().anyRequest().authenticated();
}
И когда я удалить .and().authorizeRequests().anyRequest().authenticated()
я не получаю сообщение об ошибке, и в состоянии GET
данные с сервера.
Итак, в целом я уверен, что это не Access-Control-Allow-Origin
, и это потому, что сервер не получает мой заголовок авторизации. Когда я пытаюсь запросить сервер у почтальона, без auth, я также получаю 401, но когда я добавляю Basic auth, я получаю 200.
Я также проверяю вывод пароля в почтальоне и в angualr2, чтобы убедиться, что 'Basic ' + btoa('nirgn:password')
в angualr2 выдает тот же пароль почтальона, и это то же самое. Вот он: