过滤器在 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/*” (<url-pattern>/tela-paciente/*</url-pattern>
)?
您的问题是一个 tomcat 问题,该特定映射中没有与 struts 相关的任何内容。
以下 Steven Benitez 的陈述是正确的 - 我的错(“不会进入您的安全过滤器”)。
有关过滤器的更多一般信息:除非其中一个过滤器通过不调用过滤器链来停止处理,否则它们会被处理(这可能是这里的情况 - 不过这应该是一种罕见的事情,仅在处理时使用例外,重定向 URL 或阻止页面加载时)。您可以将任意数量的过滤器绑定到重叠的 URL 集。
【讨论】:
以上是关于过滤器在 Struts2 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
过滤器映射 URL 模式 *.action 不起作用 struts2
视图“搜索词”暴露的过滤器在 PROD 中不起作用,但在本地起作用