gpt4 book ai didi

java - 在 Sling 中映射过滤器和 servlet

转载 作者:行者123 更新时间:2023-12-04 05:50:30 25 4
gpt4 key购买 nike

我有一个要求,我对页面的请求将由拦截过滤器过滤。根据不同的条件,请求必须重定向到不同的页面。

我已经创建了一个包并在包激活器中注册了 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 包开发,以部署在 DayCQ 环境中。

    最佳答案

    当您使用 Sling 时,您应该使用 Sling 的基于 SCR 的标准方法来注册您的组件,如 http://sling.apache.org/site/filters.html 所述。用于过滤器和 http://sling.apache.org/site/servlets.html对于 servlet。

    像您似乎正在做的那样直接向 HttpService 注册 servlet 和过滤器将与 SlingMainServlet“对抗”,它应该在 Sling 应用程序中获取所有请求。

    关于java - 在 Sling 中映射过滤器和 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10118928/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com