【问题标题】:CORS not working with angular 5 tomcat 8 applicationCORS 不适用于 Angular 5 tomcat 8 应用程序
【发布时间】: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 应用程序。已经写在我的帖子里了。

标签: angular tomcat cors


【解决方案1】:

尝试将"no-token" 标头添加到"cors.allowed.headers" 部分。

【讨论】:

    【解决方案2】:

    我的解决方案是让我的请求通过 proxy.conf.json 并设置 responseType: 'text' 或 'text/json' 或您需要的任何内容。这让响应最终来到了我的console.log()。 source.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-19
      • 2017-04-24
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      相关资源
      最近更新 更多