【问题标题】:Lifecycle of servlet filter doFilter methodservlet过滤器doFilter方法的生命周期
【发布时间】:2012-10-07 19:54:00
【问题描述】:

我正在尝试在调用后在响应对象中设置标头

chain.doFilter()

但是,没有设置标题。调用 chain.doFilter() 后,控制权是否会返回到 doFilter() 方法?

【问题讨论】:

    标签: servlets http-headers servlet-filters


    【解决方案1】:

    请求过滤器可以:

    • 执行安全检查
    • 重新格式化请求标头或正文
    • 审核或记录请求

    响应过滤器可以:

    • 压缩响应流
    • 附加或更改响应流
    • 完全创建不同的响应

    【讨论】:

      【解决方案2】:

      但是,标题没有设置。

      如果响应已经提交,就会发生这种情况(阅读:当响应的第一部分,包括所有标头,已经发送到客户端时;这是一个不归路)。有点理智的 servletcontainer 会在任何尝试在已提交的响应上设置标头时抛出IllegalStateException。这应该在服务器日志中可见。你读过吗?


      在调用 chain.doFilter() 之后,控制权是否会返回到 doFilter() 方法?

      您可以通过放置断点或 sysout/logger 行轻松地自行检查。但是,是的,如果没有来自 doFilter() 调用的未捕获异常,则控件肯定会以通常的 Java 方式返回,并且将执行剩余的行。


      回到您的具体功能要求,您需要重写代码,以便在响应提交之前设置标头。由于没有以任何方式详细说明具体的功能要求,因此无法在此答案中给出一些提示或启动示例。最直接的方法是在调用doFilter() 之前设置标题

      【讨论】:

        猜你喜欢
        • 2023-03-03
        • 2011-04-16
        • 1970-01-01
        • 1970-01-01
        • 2017-05-14
        • 2021-04-04
        • 1970-01-01
        • 2014-12-01
        • 2019-02-12
        相关资源
        最近更新 更多