【问题标题】:How to run a PhaseListener before all Filters?如何在所有过滤器之前运行 PhaseListener?
【发布时间】:2012-03-25 02:54:18
【问题描述】:

我有一个 phaseListener 和多个过滤器。我想知道是否有办法创建优先级。我希望 phaseListener 首先是所有过滤器。我将web.xml 中的url 映射/* 用于我的过滤器。

【问题讨论】:

    标签: java jsf servlet-filters phaselistener


    【解决方案1】:

    我希望 PhaseListener 是第一个,然后是所有的过滤器。

    这是不可能的。阶段侦听器将由 JSF faces servlet 执行。但是,根据规范,过滤器在任何 servlet 之前调用。你需要修改你的方法。显然相位监听器实际上需要是一个过滤器。如果您完全不依赖于 faces 上下文,这是非常有可能的。然后可以将过滤器映射放在web.xml 中所有其他过滤器映射的前面。

    【讨论】:

    • 奇怪。我们使用的是 Wildfly 9.0.2,PhaseListeners 在我们的过滤器之前被调用。
    • @Olivier:这可能是一种误解(例如,在 chain.doFilter() 调用后完成了不同的请求或过滤器的工作)
    • 你是对的,这是一个误解,因为在显示登录页面之前调用了 PhaseListeners,而根本没有调用 Filters。现在我不知道为什么在显示登录页面之前不调用过滤器。编辑:我在这里找到了原因:stackoverflow.com/questions/7793737/… ;)
    【解决方案2】:

    当模式匹配相同时,处理顺序由描述符 (web.xml) 中过滤器映射的顺序确定。

    因此,如果您希望 X 排在第一位,请先列出它。

    【讨论】:

    • 我希望我的相位监听器是第一个,在这之后我不会满足
    猜你喜欢
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2016-08-05
    • 1970-01-01
    • 2012-07-14
    • 2019-01-21
    • 1970-01-01
    相关资源
    最近更新 更多