【发布时间】:2019-02-13 17:12:07
【问题描述】:
在 SO 中有关于这个问题的多个答案。所有这些都归结为在 web.xml 中配置 CORSFilter(在应用程序或服务器中)。而且我已经尝试并且仍在尝试使这项工作。 以下是详细信息: 前端:在 localhost:4200 运行的 Angular 5 应用程序 后端:在 https://localhost:4553 的 Tomcat 8 上运行的基于 cxf 的 REST 应用程序 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>
我正在使用基于 JWT 令牌的身份验证和 AuthInterceptor 角度,如果每个请求都存在 Bearer 令牌,则将其附加到标头中。
身份验证的其余端点是: 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 相关的标头。
我关注了answer,Tomcat 站点的 CORSFilter 文章,并咨询了许多其他人,但尚未找到任何解决方案。
我已经从 Postman 进行了测试,但它工作正常,我发现 Postman 在发送请求时的工作方式与浏览器不同。
如果需要任何其他详细信息,请告诉我。前两天一直卡在这里。
【问题讨论】:
-
你得到什么响应状态码?
-
我收到 403 Forbidden 错误。
-
两个端点中的哪一个导致了问题?
-
您使用的是哪个后端服务器 Java/Php/Python?
-
后端:在 Tomcat 8 上运行的基于 cxf 的 REST 应用程序。已经写在我的帖子里了。