2015-01-16 47 views

回答

0

有兩個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菲利克斯白板過濾器,而不是吊帶。 See here。因此,過濾器將爲OPTIONS設置CORS頭並返回,併爲其他所有內容設置CORS頭,並將請求傳遞給鏈中的下一個過濾器。

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/ 
+0

感謝您的想法tonied ....我使用nodejs做類似的事情。我只是試圖找到一種方法來刪除中間的這個反向代理服務器。 – Vijey

相關問題