因此,要回答您的具體問題,如果您希望在調用組件之前執行過濾器,您將創建一個正在監聽組件級過濾器作用域的過濾器。
見 http://sling.apache.org/documentation/the-sling-engine/filters.html
那麼你將不得不您的過濾器更改來電請求到SlingServletRequest並確定目標資源就是你正在尋找的人。
但是,此篩選器將在頁面上包含的每個單個組件上執行。這可能對您有用的逆向過程是ResourceDecorator。
http://sling.apache.org/documentation/the-sling-engine/wrap-or-decorate-resources.html
這些當資源被確定執行,之前的servlet和過濾來電,這將讓你驗證,如果資源是一類你有興趣,然後允許你添加對資源對象的附加信息。然而,這又是一項將應用於所識別的每個資源的服務。
但是,如果你正在尋找的是隻針對特定路徑執行的過濾器,則沒有。吊索不這樣做。您提到Spring MVC和Spring MVC的MVC完全不同,然後是MVC的Slings版本。
編輯
因此,在傳統的web應用程序中,servlet將是在一個固定的位置,所有過濾器之前調用這個servlet應用。在Sling中,您將動態連接servlet以生成結果頁面。因此,每當您在servlet中並直接或間接調用請求調度程序時,它將再次執行解析過程,並在執行新servlet之前再次應用一系列過濾器。
爲了防止需要僅應用於每個單一內部調度的主要請求的高級過濾器,他們提出了上下文或應用於不同時間並與不同時間關聯的過濾器鏈的想法包括的類型。
這是一個基本的過濾器,它會在被調用時記錄消息。我從記憶中做到了這一點,所以你需要用它來記住它。
@SlingFilter(scope = SlingFilterScope.COMPONENT, order = Integer.MIN_VALUE)
public class SampleFilter implements Filter {
private static final Logger LOG = LoggerFactory.getLogger(SampleFilter.class);
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request;
Resource res = slingRequest.getResource();
if (!(res == null || ResourceUtil.isNonExistingResource(res))) {
LOG.error("this servlet is called before resource {} at path {}", res.getName(),res.getPath());
}
chain.doFilter(request, response);
}
}
這樣做的重要組成部分,是範圍= SlingFilterScope.COMPONENT看看我在前面已經列出的網頁,並嘗試slignfilterscope的不同組合,你會看到它是如何被在不同的時間使用。 scope = SlingFilterScope.REQUEST將在每個頁面的基礎上位於頂層。
如果你喜歡春天,你應該檢查這個。 http://neba.io/neba -in-a-nutshell.html – nerd 2014-11-24 14:47:02
@nerd:令人驚歎的鏈接!你認爲這可以幫助我解決我的問題嗎?我正在瀏覽網站,但是您可以通過告訴我是否可以使用NEBA – Oliver 2014-11-25 05:30:16