【问题标题】:How to Enable CORS in CRXDE Lite/AEM如何在 CRXDE Lite/AEM 中启用 CORS
【发布时间】:2015-01-16 13:37:20
【问题描述】:

我们使用 CRX DE lite/Adobe EM 作为 Angularjs SPA UI/前端的后端。我们如何为这种后端技术设置 CORS?我们可以访问工具http://localhost:4502/crx/de/index.jsp 来更改设置。但我们不确定如何启用 CORS。

请指教。

【问题讨论】:

    标签: cors aem crx


    【解决方案1】:

    我不知道在 AEM 中的何处启用 CORS(或者如果可能的话,我会查看 OSGi 控制台 http://localhost:4502/system/console/configMgr 如果有的话),但解决 CORS 问题的一种方法是公开 AEM 和在同一个域中的前端,通过在 Apache 上设置代理应该相当容易。

    在您的 AEM 发布实例前面的 Apache 服务器上,在 httpd.conf 中,您可以执行以下操作:

    ProxyPass /your-frontend http://whatever.it.runs.on/actual-path-to-the-frontend/
    ProxyPassReverse /your-frontend http://whatever.it.runs.on/actual-path-to-the-frontend/
    

    【讨论】:

    • 感谢您提出的想法......我正在使用 nodejs 做类似的事情。我只是想找到一种方法来删除中间的这个反向代理服务器。
    【解决方案2】:

    从 AEM 6.3 开始 有一个名为Adobe Granite Cross-Origin Resource Sharing Policy 的OOTB 服务。就像使用 alloworigin=[http://localhost:8000] 属性创建 OSGi 配置一样简单。就我而言,我的 Angular 应用程序在端口 8000 上运行,试图访问 4503 上的发布者。

    AEM 6.3 之前的版本 我最终要做的(起初)是创建一个实现AuthenticationInfoPostProcessor 的服务。在那里,我设置了以下标题:

    • 访问控制允许凭据
    • 访问控制允许来源
    • 访问控制允许方法

    GET 请求一切正常。但是当我们尝试 POST 时,我们遇到了浏览器发送飞行前 OPTIONS 请求失败的问题,因为浏览器没有使用login-token cookie。

    然后我们尝试了@SlingFiter,但是它属于正常的 sling 管道,因此它是在检查身​​份验证之后,所以没有 auth cookie,预飞行总是会失败。

    最后,我们实现了一个带有以下注解的过滤器:

    @Component(immediate = true)
    @Service(value = Filter.class)
    @Properties({ @Property(name = "pattern",
                            value = "/.*"),
                  @Property(name = Constants.SERVICE_RANKING,
                            intValue = 1000) })
    

    这里的关键是 pattern 属性,它将过滤器注册为 Apache Felix Whiteboard 过滤器,而不是 Sling。 See here。因此过滤器将为 OPTIONS 设置 CORS 头并返回,并为其他所有内容设置 CORS 头,并将请求传递给链中的下一个过滤器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 2015-05-27
      • 2020-11-24
      • 2018-10-19
      • 2021-04-14
      相关资源
      最近更新 更多