如何在CRXDE Lite / AEM中启用CORS

时间:2015-01-16 13:37:21

标签: cors aem crx

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

请建议。

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:1)

有两个值得关注的OSGi服务(尽管我从未尝试过这些服务)

  • com.adobe.cq.social.commons.cors.CORSAuthInfoPostProcessor
  • com.adobe.cq.social.commons.cors.CORSAuthenticationFilter

我最初做的事情(最初)是创建一个实现AuthenticationInfoPostProcessor的服务。在那里,我设置了以下标题:

  • 接入控制允许证书
  • 访问控制允许来源
  • 接入控制允许的方法

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

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

最后,我们使用以下注释实现了一个过滤器:

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

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