2012-12-12 127 views
4

由於某些特定原因,我需要自動爲每個請求的URL添加或附加一個參數,當且僅當該參數自第一個請求以來已存在於URL中。換句話說,如果我的網址爲/share/page/site/sample/documentlibrary?embedded,則對/share/page/site/sample/[whatever]的每個請求都必須包含嵌入參數以及原始請求可能添加的其他參數。如何在每個HTTP請求上自動添加參數?

我正在使用Alfresco Share(v4.2.b)什麼意思是說Web應用程序已經存在,儘管我可以執行自定義,但我有侷限性,因爲我沒有完全控制它。如果這是我從頭開始創建的網絡應用程序,它不會是一個問題。根據我的限制,理想情況下解決方案應該儘可能少侵入。同時,如果它是一個基於JavaScript的解決方案,使用YUI而不是其他庫是一個優點,但不是一個要求。

我一直在尋找在尋找一種方法,之後我心目中的下一個可能的解決方案:

  1. 通過添加參數每個頁面卸載之前URL中使用的JavaScript。喜歡的東西:

    window.onbeforeunload = function(e) { 
         // Add parameter to target URL 
         }; 
    

    但我相信,我在讀並根據一些測試中,我這樣做是行不通的。看起來有一種安全限制(順便說一下)。

  2. 通過使用JavaScript也更新每個鏈接的href屬性(<a/>),一旦頁面完成加載。例如,/share/page/site/sample/document-details?nodeRef=workspace://SpacesStore/089acea3-3b37-403d-9a8d-ae484ddd2ccb可以轉換爲/share/page/site/sample/document-details?nodeRef=workspace://SpacesStore/089acea3-3b37-403d-9a8d-ae484ddd2ccb&embedded。該解決方案的問題是,這兩種形式的GET或POST和HREF使用JavaScript將超出範圍的觸發...

  3. 使用任何URL重寫技術或類似圖書館UrlRewriteFilter(沒有時間還沒有測試它,抱歉)。

  4. 創建一個露天分享extension module其更改或更新每一個請求,也許有一個模塊或子評價者的幫助。我不知道它是否適用於擴展模塊,但我相信我可以在任何可以對請求執行更改的地方閱讀。

我必須添加(對於那些與Alfresco分享知識)選項1,2和4將作爲擴展模塊實現。

那麼,我希望我已經解釋了我的問題。我強烈感謝一些建議或可能的方法。無論如何,我會繼續努力,我會提出任何更新。

回答

0

沒有使用過Alfresco,但另外一個選擇是擁有一個自定義的JSP標籤。

讓我們稱之爲customlink,然後當您在頁面上呈現鏈接時,請使用此自定義jsp標記而不是<a>標記。然後

E.g

<mynamespace:customlink href="/somelink">My Content</mynamespace:customlink> 

定製JSP標籤可以是負責檢查的請求的查詢字符串參數,如果存在,那麼其追加到URL,並打印查詢字符串的標籤。

這有利於不依賴JS或將任何這些暴露給客戶端。它還允許將來進一步擴展。

+0

恐怕不可能做到。我不能在Alfresco Share中做這樣的事情。共享是一個已經存在的Web應用程序,您可以自定義它創建擴展模塊,大致可以防止部分渲染,替換部分,在部分之前或之後添加自定義內容,而不是太多。我知道如果你從未與Alfresco Share合作過,那麼很難弄清楚我所擁有的限制。 –

2
  1. 如果是針對每個請求,那麼過濾器是最好的。共享已經像你所說的那樣使用了urlrewrite,所以改變默認設置並添加你的參數。

  2. 如果您有分享知識,則覆蓋所包含的模板會更好: 覆蓋alfresco-template.ftl它位於templates/org/alfresco/include中。生成頁面時始終加載此模板。它還具有爲Liferay Portlet定義的portletMode。

  3. 我們所做的嵌入documentlibrary是定義我們自己 份額自定義頁面,所以我並不需要「總是」目前ARG任何 更多。

+0

我從來沒有明確使用過UrlRewrite,你大概知道添加'urlrewrite.xml'需要什麼嗎?關於你的第二個選擇,我對Share有一些瞭解,但我不明白你的建議。關於第三個選項,我對嵌入式文檔庫(http://stackoverflow.com/a/13376026/1514315)也做了同樣的事情,但是我想稍微進一步討論一些超出範圍的原因(如果你想要我可以與你分享並討論,可能你對此感興趣)。謝謝。 –

+0

如果你看到urlrewrite它只是代理它,所以你可以添加你的靜態參數。如果您想要更多控制,那麼只需在web.xml中添加另一個自己的Java過濾器並編寫您的Java代碼以將您的參數或屬性添加到請求中。對於選項2和3,你需要提供額外的信息,通常你需要param在你的共享代碼的某個地方進行檢查,所以基本上用2和3你不需要有一個參數,你可以使用一個JS全局初始化。 –

+0

實際上,在問這個問題之前,我的嵌入式文檔庫工作正常,問題在於,如果您訪問文檔詳細信息,嵌入模式會丟失,因爲我用它來表示它的參數不再可用。基本上我需要的是找到一種方法來保持信號的嵌入模式,就像開箱即用的portlet擴展一樣。順便說一下,如果參數使用自定義評估程序存在,我使用擴展模塊隱藏特定區域。 –

1

怎麼樣使用mod_proxy,然後使用mod_rewrite重定向用戶的請求,如果他們不已經包含了強制的參數通過Apache httpd的代理連接?如果使用RewriteRule指令,則可以指定相當豐富的表達式,如果該參數尚不存在,則會添加參數(docs

+0

這聽起來很有希望,但我已經使用Apache HTTPd,所以這是我必須調查的東西。我會強烈考慮你的建議,謝謝。 –

相關問題