首页 > 解决方案 > 如何在不使用 API 管理器的情况下在 Mule 4 中配置 CORS?

问题描述

我们正在尝试从 Angular 应用程序调用 mule 服务并收到 CORS 错误。

当我们在 global.xml 的 http 配置中添加 CORS 拦截器时,我们的项目遇到了问题。

<http:listener-config name="api-httpListenerConfig">
    <http:listener-connection host="${http.host}" port="${http.private.port}" />
<http:listener-interceptors>
        <http:cors-interceptor allowCredentials="true">
            <http:origins>
                <http:origin url="*" accessControlMaxAge="0">
                    <http:allowed-methods>
                        <http:method methodName="GET" />
                        <http:method methodName="POST" />
                        <http:method methodName="DELETE" />
                        <http:method methodName="OPTIONS" />
                        <http:method methodName="HEAD" />
                        <http:method methodName="PUT" />
                    </http:allowed-methods>
                     <http:allowed-headers>
                        <http:header headerName="X-Allow-Origin" />
                    </http:allowed-headers>
                </http:origin>
            </http:origins>
        </http:cors-interceptor>
    </http:listener-interceptors> 
</http:listener-config>

GET 服务不应被浏览器中的 CORS 策略阻止。

标签: mulemule-studioanypoint-studiomulesoft

解决方案


API 管理器允许您将网关逻辑(CORS 协商、身份验证/授权、流量管理等)排除在 Mule 应用程序之外。但是,如果这是一个内部应用程序并且没有真正受益于 API 网关,那么这里是在 Mule 应用程序中处理 CORS 的一种方法:

  1. 在你的 API 中实现 Options 方法。这必须在其他来源将调用或尝试的所有资源上独立完成(不确定可能性,尤其是在 APIKitRouter 到位的情况下)在正则表达式模式上实现选项以处理所有资源。
  2. 返回侦听器上的 Access-Control-Allow-Origin 标头以及尝试访问请求的来源。还要添加适当的 Access-Control-Allow-Methods 和 Access-Control-Allow-Origins 标头以及适当的值。

拦截器可能是出于同样的目的,但尝试它是徒劳的。


推荐阅读