我有一个要求,其中我对页面的请求是通过拦截过滤器进行过滤。根据不同的条件,请求必须重定向到不同的页面。映射过滤器和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环境中。