过滤器在 Struts2 中不起作用

Posted

技术标签:

【中文标题】过滤器在 Struts2 中不起作用【英文标题】:Filters not working in Struts2 【发布时间】:2011-05-24 05:36:44 【问题描述】:

由于某些未知原因,我无法在 struts2 上使用过滤器。我正在使用 apache tomcat 并使用过滤器来限制用户访问(我更喜欢而不是拦截器)。我的/tela-paciente 请求没有被过滤有什么原因吗??

   <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>Paciente</filter-name>
        <filter-class>br.ufg.inf.sas.filtros.FiltroPaciente</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>Paciente</filter-name>
        <url-pattern>/tela-paciente</url-pattern>
    </filter-mapping>

【问题讨论】:

【参考方案1】:

要记住的另一件事是,在您的示例中,/tela-paciente 的映射发生在 /* 的映射之后(对于 Struts2 过滤器),因此所有请求都将映射到 Struts2,并且没有一个会影响您的安全过滤器。

请记住,过滤器的顺序很重要。 :)

@totaam:StrutsPrepareAndExecuteFilter 不会链接到其他过滤器,除非:

struts.action.excludePattern 属性将请求 URL 排除在处理之外 请求未映射到操作或静态资源

因此,假设他的请求确实映射到一个动作,如果它在 Struts2 过滤器之后被映射,他的安全过滤器将不会被调用。

【讨论】:

【参考方案2】:

您是否尝试将过滤器映射设置为“/tela-paciente/*” (&lt;url-pattern&gt;/tela-paciente/*&lt;/url-pattern&gt;)?

您的问题是一个 tomcat 问题,该特定映射中没有与 struts 相关的任何内容。

以下 Steven Benitez 的陈述是正确的 - 我的错(“不会进入您的安全过滤器”)。

有关过滤器的更多一般信息:除非其中一个过滤器通过不调用过滤器链来停止处理,否则它们会被处理(这可能是这里的情况 - 不过这应该是一种罕见的事情,仅在处理时使用例外,重定向 URL 或阻止页面加载时)。您可以将任意数量的过滤器绑定到重叠的 URL 集。

【讨论】:

以上是关于过滤器在 Struts2 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

过滤器映射 URL 模式 *.action 不起作用 struts2

过滤器在 FileDialog 中不起作用

视图“搜索词”暴露的过滤器在 PROD 中不起作用,但在本地起作用

Servlet 过滤器似乎在 Dropwizard 中不起作用

Kendo UI 网格过滤器在引导模式中不起作用

操作过滤器在 asp.net 核心 Web API 中不起作用