gpt4 book ai didi

angular - CORS 不适用于 Angular 5 tomcat 8 应用程序

转载 作者:行者123 更新时间:2023-11-28 23:14:28 25 4
gpt4 key购买 nike

在 SO 中有关于此问题的多个答案。所有这些都归结为在 web.xml(在应用程序或服务器中)中配置 CORSFilter。我已经尝试并仍在努力使这项工作成功。以下是详细信息:前端:在本地主机上运行的 Angular 5 应用程序:4200后端:基于 cxf 的 REST 应用程序在 Tomcat 8 上运行,网址为 https://localhost:4553web.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com