【发布时间】:2020-09-01 18:47:09
【问题描述】:
我正在尝试在来自 Angular 前端的 http 请求中添加一个 Authorization 标头,但它不起作用:后端没有收到此标头。
当我在 Chrome 的控制台上观看时,我可以看到请求包含标头。
当我使用 Postman 时,后端的标头没问题。
这是我的 Angular 拦截器:
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
[...]
}
【问题讨论】:
-
不确定 tihs 是否有帮助,但我使用:request = request.clone({ setHeaders: { foo: bar } });
标签: angular spring http http-headers angular-http-interceptors