【问题标题】:how can you bypass the filter chain in magnolia cms?如何绕过 magnolia cms 中的过滤器链?
【发布时间】:2011-12-14 21:21:21
【问题描述】:

如何绕过所有过滤器链?

我希望绕过以/web/ 开头的 url,以便 spring 调度程序可以接收它们。

谢谢:)

【问题讨论】:

标签: java spring content-management-system servlet-filters magnolia


【解决方案1】:

在 Magnolia 中,您可以在 /server/filters ... 中的每个过滤器节点下配置绕过,或者直接在该节点下配置绕过整个链。 您也可以简单地更改 web.xml 中的映射

【讨论】:

  • 在我的 web.xml 中,我已经为开花(木兰模块)配置了 servlet。我创建了一个自定义模块,我试图在木兰中加载弹簧。在这个模块描述符中,我已经声明它是 spring 的 servlet。我想在 magnolia 过滤器链中添加一个旁路,就像你对完整链所说的那样,当 url 以 /web 开头时,将请求定向到 spring servlet 而不是开花的。唯一的问题是我真的不知道该怎么做..这种方法可以吗?谢谢:)
  • BlossomDispatcherServlet 作为 Magnolia 渲染页面的一部分被调用,这里不涉及 servlet 容器。控制器无法从外部世界访问。所以你不需要排除他们的路径。如果您的意图是添加一个 应该 可从外部访问的控制器(未使用 @Template 或 @Paragraph 注释),那么我建议您将 DispatcherServlet 添加到您的模块 xml 文件中。您不需要排除它,因为它是从过滤器链中调用的。
【解决方案2】:

要排除 uri 不被 Magnolia 过滤器链处理,请在 Configuration 中添加到 /server/webContainerResources/mappings 的映射。

另一种选择是在整个过滤器链上添加排除项。这意味着过滤器链被完全绕过,而添加 WebContainerResource 映射意味着应用了一些过滤器。例如设置 Magnolia 上下文的过滤器。

有关详细信息,请参阅技术指南中的Request processing and filters

【讨论】:

    【解决方案3】:

    我能想到的一件事是直接从您的过滤器中调用调度程序 servlet service(..) 方法。如何获取dispatcher servler - 它应该注册为一个spring bean,所以我想你可以从WebApplicationContextUtils的上下文中获取它

    但这很难看。您应该更好地配置过滤器映射 url。事实上,某些过滤器没有继续发送到调度程序 servlet 的原因是什么?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 2011-04-13
      • 2019-02-21
      • 2012-10-27
      • 2013-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多