在 SO 中有关于此问题的多个答案。所有这些都归结为在 web.xml(在应用程序或服务器中)中配置 CORSFilter。我已经尝试并仍在努力使这项工作成功。 以下是详细信息: 前端:在本地主机上运行的 Angular 5 应用程序:4200 后端:基于 cxf 的 REST 应用程序在 Tomcat 8 上运行,网址为 https://localhost:4553 web.xml 中的 CORS 过滤器映射:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Allow-Origin, Access-Control-Request-Headers, Authorization</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials, Content-Type, Authorization</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我在 Angular 中使用基于 JWT token 的身份验证和 AuthInterceptor,如果每个请求都存在,它将在 header 中附加 Bearer token 。
身份验证的其余端点是: https://localhost:8453/onlinecounselling/service/auth
拦截器代码:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({
setHeaders: {
Authorization: `${this.auth.getAccessToken().flatMap(t => `Bearer ` + t)}`
}
});
return next.handle(request);
}
现在当我发送这个授权请求时,首先,请求进入飞行前模式(我不确定为什么,我已经检查了 MDN article 但没有找到原因)并发送一个OPTIONS请求,与之相关的请求头是:
Request Headers
Access-Control-Request-Headers: content-type,no-token
访问控制请求方法:POST 来源:http://localhost:4200 用户代理:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
响应头就是这些:
Cache-Control: private
Content-Length: 0
Content-Type: text/plain
Date: Sat, 08 Sep 2018 16:02:31 GMT
Expires: Thu, 01 Jan 1970 05:30:00 IST
我在 CORSFilter 中没有提供与 CORS 相关的 header 。
我关注了这篇 answer,即 Tomcat 站点的 CORSFilter 文章,并咨询了许多其他文章,但还没有找到任何解决方案。
我已经从 Postman 进行了测试,虽然它工作正常,但我发现 Postman 的工作方式与浏览器在发送请求时的工作方式不同。
如果需要任何其他详细信息,请告诉我。我被困在这里已经两天了。
最佳答案
尝试将 "no-token"
header 添加到 "cors.allowed.headers"
部分。
关于angular - CORS 不适用于 Angular 5 tomcat 8 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52237945/