Я пытаюсь добавить заголовок авторизации в свой HTTP-запрос из интерфейса Angular, но он не работает: сервер не получает этот заголовок.

Когда я смотрю на консоли Chrome, я вижу, что запрос содержит заголовок.
Когда я использую Postman, заголовки в бэкэнде в порядке.

Вот скриншот Почтальона: введите описание изображения здесь

Вот мой угловой перехватчик:

    intercept(request: HttpRequest<any>, next: HttpHandler): 
        Observable<HttpEvent<any>> {
            if (!request.url.startsWith('http')) {
               if (localStorage.getItem('token')) {
                 let headers: HttpHeaders = request.headers;
                 headers = headers.set('Authorization', 'Bearer ' + 
                 localStorage.getItem('token'));

                 request = request.clone({
                     url: environment.backendUrl + request.url, headers
                 });
               }
            }

            console.log("headers are : ", request.headers);

            return next.handle(request).pipe(catchError((error: 
            HttpErrorResponse) => 
            {
               [...]
            })) as any;
   }

А вот и мой фильтр Spring:

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {

    final HttpServletRequest request = (HttpServletRequest) servletRequest;
    final HttpServletResponse response = (HttpServletResponse) servletResponse;

    // Assume we have only one Authorization header value
    final Optional<String> token = Optional.ofNullable(request.getHeader(HttpHeaders.AUTHORIZATION));
    // Optional is empty
    [...]
}
0
Mattew Eon 1 Сен 2020 в 09:55

2 ответа

Лучший ответ

Моя проблема была связана с WebSecurityConfig, я забыл включить CORS следующим образом:

http
      .cors().and()
0
Mattew Eon 1 Сен 2020 в 10:47

Вам нужно добавить ключ заголовка авторизации в Access-Control-Allow-Headers (в бэкэнде)

Access-Control-Allow-Headers: авторизация (когда вы так даете, он принимает только указанные заголовки. Означает, что если вы хотите принять другой ключ, такой как авторизация, вы должны указать это имя ключа)

Или

Вы также можете дать это

Заголовки-разрешения-управления доступом: *

0
dev0201 1 Сен 2020 в 07:47