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

标签 angular tomcat cors

在 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/

相关文章:

Angular Observable HttpInterceptor ForkJoin 不起作用

javascript - 问题获取 ID( Angular Material - Firestore)

java - quartz 触发器不触发

javascript - Angular 4 : Prevent rerendering component on input change

Angular 6+ :ProvidedIn a non root module is causing a circular dependency

node.js - 将 CORS 模块添加到单个快速路线不起作用

asp.net - 使用 CORS 避免预检 OPTIONS 请求

azure - 在 Terraform Azure 应用服务资源中配置 CORS

eclipse - Tomcat 在 Eclipse 中与 Maven 的集成

Java servlet tomcat 404