2015-09-07 52 views
0

我們需要什麼:如何在任何頁面上執行外部POST請求?
如何處理Adobe CQ中任何頁面的外部POST請求5.5

我們爲什麼需要:我們正在爲我們的客戶開發使用Adobe CQ的安全Intranet門戶。任何對內部網門戶的Adobe CQ任何頁面的請求都會重定向到客戶端界面。這是一個外部系統,它生成一個TOKEN並通過POST方法通過HTTP請求將此令牌作爲請求參數發送給CQ。

我們根據此令牌設置我們的Cookie,該令牌需要成爲每個頁面的一部分。 (我們正在使用頁面組件並將它們設置爲根級別)

需要關於如何實現這一點的建議。讓我知道是否需要更多細節。

+0

您可以使用POST方法公開servlet。一旦外部系統回到你的系統,它們將會擊中你的servlet。在servlet中處理您的任何功能或從此處重定向到某個頁面。 – Abie

+0

感謝您的回覆。我們知道這種方法。不幸的是,我們無法控制更改設置爲/ content/myProject/*的HTTP請求POST方法URL表達式。我們需要的是,如果任何GET請求在/ content/myProject/*上被觸發,它應該爲頁面提供服務。如果在/ content/myProject/*上有任何POST請求,它應該由servlet提供服務。還建議使用/ content/*爲POST請求提供servlet路徑? –

回答

0

您可以定義您的servlet接受的方法,因此可以使用JSP和POST來處理GET,其格式爲SlingAllMethodsServlet

@Component(metatype = false) 
@SlingServlet(resourceTypes = "cq:Page", methods = "POST", generateComponent = false) 
public class MyPOSTServlet extends SlingAllMethodsServlet { 
    @Override 
    protected void doPost(final SlingHttpServletRequest request, 
      final SlingHttpServletResponse response) throws ServletException, 
      IOException { 
     //your logic here 
    } 
} 

這應該會觸發所有頁面。

關於你在你的問題下面的評論,從來沒有一個與/content的servlet路徑。要麼是固定的虛擬路徑,如/bin/myservletresourceType。 檢查Sling的文檔:https://sling.apache.org/documentation/the-sling-engine/servlets.html

+0

謝謝@Thomas我們處在一個共享的環境中。所以我們無法在resourceTypes上註冊一個servlet。我們還必須在實時副本上運行此代碼。 –

+0

@yashahuja實時複製不應該是這些頁面的問題,但我看到共享環境的問題。是否有任何跡象表明這個特定的POST?您可以改爲編寫一個過濾器:https://sling.apache.org/documentation/the-sling-engine/filters.html – Thomas