AEM元件和範本構成功能強大的工具套件。 開發人員可運用這些工具,為網站商業使用者、編輯和管理員提供功能,讓他們的網站適應不斷變化的商業需求(內容敏捷性),同時保留網站的統一版面(品牌保護)。
負責網站或網站組(例如全球企業的分支機構)的人員,在其網站上推出新型的內容簡報,是一項典型的挑戰。
讓我們假設有必要將新聞清單頁面新增至網站,列出已發佈之其他文章的摘要。 頁面的設計和結構應與網站的其他部分相同。
解決此類挑戰的建議方式是:
這說明此方法如何讓網站的貢獻使用者和管理員快速回應業務需求,而不需要開發團隊的參與。 其他方法,例如建立新範本,通常是一項耗費成本的工作,需要變更管理程式和開發團隊的參與。 這使得整個流程更長,成本也更高。
因此,AEM系統的開發人員應使用:
在大部分的一般專案中,開發人員適用的下列一般規則都有意義:
建立您自己的元件或自訂現有元件時,重新使用現有定義通常最簡單(而且最安全)。 相同的原則也適用於AEM中的其他元素,例如錯誤處理常式。
這可以通過複製和覆蓋現有定義來完成。 換言之,將定義從/libs
複製到/apps/<your-project>
。 此新定義位於/apps
中,可根據您的需求進行更新。
如需詳細資訊,請參閱使用覆蓋。
例如:
這涉及覆蓋元件定義:
通過複製現有元件在/apps/<website-name>/components/<MyComponent>
中建立新元件資料夾:
例如,要自定義Text元件副本:
/libs/foundation/components/text
/apps/myProject/components/text
這種情況涉及覆蓋servlet:
在儲存庫中,複製預設指令碼:
/libs/sling/servlet/errorhandler/
/apps/sling/servlet/errorhandler/
您不得變更/libs
路徑中的任何項目。
這是因為下次升級實例時會覆寫/libs
的內容(套用修補程式或功能套件時,很可能會覆寫)。
對於配置和其他更改:
/libs
中的項目複製到/apps
/apps
中進行任何更改JCR查詢在正確使用時是功能強大的工具。 它們適合:
真正的使用者查詢,例如內容的全文搜尋。
需要在整個儲存庫中找到結構化內容的場合。
在這種情況下,請確定查詢僅在絕對需要時執行,例如元件啟動或快取失效(而非工作流程步驟、觸發內容修改的事件處理常式、篩選等)。
JCR查詢不應用於純演算請求。 例如,JCR查詢不適用於
若要轉譯內容,請使用內容樹狀結構的導覽存取權,而非執行JCR查詢。
如果您使用Query Builder,則會使用「JCR查詢」,因為「查詢產生器」會在引擎蓋下產生「JCR查詢」。
也值得參考安全檢查清單。
您應使用使用者工作階段,而非管理工作階段。 這表示您應使用:
slingRequest.getResourceResolver().adaptTo(Session.class);
跨網站指令碼(XSS)可讓攻擊者將程式碼注入其他使用者檢視的網頁。 惡意Web使用者可利用此安全性弱點略過存取控制。
AEM會套用在輸出時篩選所有使用者提供內容的原則。 在開發和測試期間,防止XSS的優先順序最高。
此外,Web應用程式防火牆(例如Apache](https://modsecurity.org)的[mod_security)可提供可靠、集中的部署環境安全控制,並防止先前未被發現的跨網站指令碼攻擊。
AEM提供的范常式式碼本身可能無法針對此類攻擊提供保護,而且通常需仰賴網路應用程式防火牆的請求篩選。
XSS API快速參考表包含您需要知道的資訊,以便使用XSS API並讓AEM應用程式更安全。 您可從以下網址下載:
XSAPI快速參考表。
至於任何網際網路應用程式,請務必在傳送機密資訊時
這適用於對系統保密的資訊(如設定或管理存取),以及對其使用者保密的資訊(如其個人詳細資訊)
可針對AEM自訂錯誤頁面。 這是建議的,因此實例不會顯示內部伺服器錯誤上的吊索跟蹤。
如需完整詳細資訊,請參閱自訂錯誤處理常式所顯示的錯誤頁面。
由於AEM可存取大量檔案,因此建議您明確為AEM設定Java進程開啟的檔案數目。
為了盡量減少此問題的發展,應確保所開啟的檔案能盡快(有意義)正確關閉。