【问题标题】:What is the purpose of javax.servlet.FilterChain? [duplicate]javax.servlet.FilterChain 的目的是什么? [复制]
【发布时间】:2013-01-19 13:18:48
【问题描述】:

我继承了一个 Struts 1 应用程序,该应用程序大量使用了 FilterChain,但我不明白这段极其混乱的代码的好处。

"在 Servlet API 中,当您想要控制、预处理和/或后处理特定请求时,通常使用 Servlet。但是当您想要根据特定条件过滤/修改常见请求和/或响应时,则使用 Filter更合适。”

我的应用中的每个请求都基于特定条件,例如商家 ID 或搜索词。但似乎将一个请求放在一个完整的东西链中,完全隐藏了开发人员试图追踪错误原因的情况,这是疯了。

【问题讨论】:

  • 您是在问过滤器链的用途,或者为什么在您的应用程序中使用它。如果是前者,请阅读文档。如果是后者,我们如何在不了解您的应用的情况下回答?
  • +1;一般来说,我同意你的看法,过滤器隐藏了许多细节。实际上,它只是帮助您设计应用程序的一种抽象(当然,如果您构建像 servlet 引擎这样的平台,它会变得更加有趣)。我个人的选择是您应该在过滤器中放置任何类型的业务逻辑(如商家)。在过滤器中实现某些非功能性方面,例如日志记录、身份验证等。
  • @home 感谢您的帮助和理解我的问题的目的。

标签: java servlets servlet-filters


【解决方案1】:

FilterChain#doFilter() 调用只是继续向目标发送 HTTP 请求,遵循与您一开始没有使用过滤器完全相同的路径。这通常是一个 servlet 类,甚至是一个 JSP 文件。因此,为了调试有问题的代码,最好在目标代码中放置断点,如果它不包含任何感兴趣的代码,则不要在过滤器中。

【讨论】:

  • 我很乐意,但我无法在本地重现此错误,只能在我的 prod 环境中重现。不过还是谢谢。
【解决方案2】:

我的同事(未在 SO 上注册)解释说,这是为了将全局功能应用于您不想在每个控制器中执行的应用,例如检查用户是否已登录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-13
    • 2011-06-28
    • 2020-05-25
    • 2023-03-30
    • 2020-02-27
    • 1970-01-01
    • 2012-01-16
    • 2012-08-15
    相关资源
    最近更新 更多