过滤器在Struts2中不起作用

时间:2010-12-12 12:58:31

标签: java struts2 servlet-filters

由于某些未知原因,我无法在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>

2 个答案:

答案 0 :(得分:3)

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

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

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

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

因此,假设他的请求映射到某个操作,如果在Struts2过滤器之后映射了安全过滤器,则不会调用他的安全过滤器。

答案 1 :(得分:2)

您是否尝试过滤映射设置为“/ tela-paciente / *”(<url-pattern>/tela-paciente/*</url-pattern>)?

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

Steven Benitez下面的陈述正确 - 我的不好(“没有人会去你的安全过滤器”)。

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