我们使用CRX DE lite / Adobe EM作为Angularjs SPA UI /前端的后端。我们如何为这种后端技术设置CORS?我们可以访问工具http://localhost:4502/crx/de/index.jsp来更改设置。但我们不确定如何设置CORS。
请建议。
答案 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服务(尽管我从未尝试过这些服务)
我最初做的事情(最初)是创建一个实现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头,并将请求传递给链中的下一个过滤器。