1

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

请指教。

4

2 回答 2

2

我不知道在 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/
于 2015-04-19T21:08:07.223 回答
1

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

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

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

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

然后我们尝试了一个@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。见这里。因此过滤器将为 OPTIONS 设置 CORS 标头并返回,并为其他所有内容设置 CORS 标头,并将请求传递给链中的下一个过滤器。

于 2016-05-02T15:03:19.460 回答