我有一個要求,其中我對頁面的請求是通過攔截過濾器進行過濾。根據不同的條件,請求必須重定向到不同的頁面。映射過濾器和servlet在吊帶
我創建了一個包和註冊的servlet和過濾器在包激活,採取了線索,從here。
以下是代碼片段:
Hashtable initParams = new Hashtable(); // to pass a dictionary object to
// service.register
initParams.put("sling.servlet.resourceTypes","/login");
initParams.put("sling.servlet.extensions","jsp");
service.registerServlet("/myServlet", this.myServlet, initParams, null);
initParams = new Hashtable();
initParams.put("sling.filter.scope","REQUEST");
service.registerFilter(this.checkPageRequest, "/.*",null, 2, null);
service.registerFilter(this.checkValidSession, "/.*", null, 1, null);
我面臨兩個問題:
我無法確定我在哪裏映射一個過濾器,相應的servlet。我的理解是,將調用
checkPageRequest
過濾器,然後調用checkValidSession
。如果沒有requestdispatcher.forward(..)
,那麼myServlet
servlet將被命中。在我的情況下,使用filterChain.doFilter(..)
按預期調用過濾器,但該servlet沒有被調用。由於我的過濾器必須攔截所有的頁面請求,所以當我對任何頁面執行
requestdispatcher.forward(..)
時,會再次調用相同的過濾器,進入循環。
我正在開發這個OSGi bundle來部署在DayCQ環境中。