当前位置: 首页 > 知识库问答 >
问题:

WEB-INF/WEB中定义的servlet过滤器的实际执行顺序是什么。xml和conf/web。xml

庄宇
2023-03-14

根据我的理解,过滤器的执行顺序是它们在web中定义的顺序。用于相同url映射的xml。但是,如果我们在容器的web上为同一url映射定义了多个过滤器,那么我找不到任何关于这种行为的参考。xml和单个应用程序的web。xml

我的假设是,因为应用程序是作为容器的一部分部署的,比如tomcat,它有web。xml本身,以及针对每个部署的应用程序的任何请求,都必须通过tomcat/conf/web中定义的过滤链。在使用应用程序过滤器之前使用xml。但我的理解是错误的

我有一个简单的web应用程序,在web中定义了两个过滤器。xml如下所示

<filter>
    <filter-name>AppFilterOne</filter-name>
    <filter-class>com.test.filters.AppFilterOne</filter-class>
</filter>
<filter>
     <filter-name>AppFilterTwo</filter-name>
     <filter-class>com.test.filters.AppFilterTwo</filter-class>
</filter>
<filter-mapping>
     <filter-name>AppFilterOne</filter-name>
     <url-pattern>/*</url-pattern>
</filter-mapping>

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

如果我点击我的网址http://localhost:8080/myapp,我看到AppFilterOne和AppFilterTwo按该顺序被点击。

现在,我在tomcat/conf/web中又添加了两个过滤器。xml(我的tomcat版本是7.0.27,支持servlet 3.0)

<filter>
    <filter-name>TomWebFilterOne</filter-name>
    <filter-class>com.test.filter.TomWebFilterOne</filter-class>
</filter>

 <filter>
    <filter-name>TomWebFilterTwo</filter-name>
        <filter-class>com.test.filter.TomWebFilterTwo</filter-class>
  </filter>

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

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

现在,如果我访问http://localhost:8080/myapp,过滤器按以下顺序执行AppFilterOne AppFilterTwo TomWebFilterOne TomWebFilterTwo

我最初的假设是,TomWebFilters将首先拦截,然后拦截特定于应用程序的过滤器。

如果我看到的结果实际上是正确的,这就是过滤器的工作方式,有没有一种方法可以影响过滤器的执行顺序。我听说过,但不确定这是不是正确的方法。

稍微回顾一下我的实际问题:在tomcat 7X实例中,我们有一堆部署在不同虚拟机中的网络应用程序。每个Web应用程序都有一个审计过滤器,用于审计和记录每个传入的请求。然而,在tomcat /conf/web.xml定义了一个过滤器来支持NTLM身份验证(JCIFS风格)。由于这种设置,每个进来的请求实际上都被记录下来(作为审核过滤器的一部分),然后为NTLM过滤。我们希望NTLM首先发生,然后是其他任何事情。

有几种方法,我在这里考虑a)我们可能需要将该过滤器定义为每个应用程序中的第一个过滤器,而不是在tomcat/conf/web.xml中定义。b)让NTLM过滤器在请求中设置一个属性,说明NTLM进程的状态,我们的审计过滤器将检查两次(即两个401 HTTP状态代码),然后返回

我对这两种方法都不是特别满意,因此想知道能做些什么

谢谢

共有1个答案

逄兴昌
2023-03-14

来解决我最初的审计日志问题,而不是在web应用程序中使用过滤器。xml,为此我使用了AOP。它似乎工作得很好。但我仍然好奇地想知道,是否有一种标准方法可以影响WEB-INF/WEB之间声明的过滤器序列。xml和conf/web。xml

 类似资料:
  • 问题内容: 我的Tomcat部署在conf文件夹下有一个web.xml文件。与WEB-INF中的conf / web.xml相比,Tomcat中的conf / web.xml是什么?我需要吗? 问题答案: 是的,您绝对需要它!它包含默认Servlet和JSP Servlet的声明。如果没有它,所有未映射到您的任何servlet上的请求(例如CSS / JS / images)将停止工作,并且所有J

  • 我在我的网络应用程序中偶然发现了一个错误,在我发现发生了什么之前,这个错误让我抓耳挠腮(最终扯了扯头发)。 基本上,我在我的网站上定义了两个过滤器。xml和两个类似的映射: 它们都是Spring MVC过滤器。我的问题是,我得到的表单数据没有被解释为UTF-8,尽管事实上编码过滤器应该在其他任何东西有机会从中读取之前将请求编码设置为UTF-8。 我最后注意到,表单方法过滤器在编码过滤器之前执行,尽

  • [上下文]tomcat 7-java 1.7 大家好,我正面临着陌生人的工作。在我的web.xml文件中,我映射了这样的请求: web.xml网站 DemoFilter.java(实现过滤器) DemoServlet.java(扩展HttpServlet) [1=预期结果]首先,当我尝试请求“/foo/bar”时,调用了过滤器和servlet(页面显示“foo”一词)。控制台结果: [2 =意外的

  • 我正在使用以下源代码目录结构的JavaEE Web应用程序: 我感兴趣的文件夹是:它包含、用于设置servlet的xml文件、SpringBean连接上下文以及JSP标记和视图。我试图理解是什么限制/定义了这种结构。例如,JSP文件是否总是必须在中,或者它们可能在其他地方?在WEB-INF中是否还有其他内容?维基百科的WAR文件条目提到了Java类的,JAR文件的——我不确定除了其他源文件位置之外

  • 问题内容: 如果我们在WAR自己中定义特定于Webapp的servlet过滤器,则过滤器的执行顺序将与中定义的顺序相同。 但是,如果我们使用@WebFilter批注定义这些过滤器,那么过滤器的执行顺序是什么,如何确定执行顺序? 问题答案: 您确实不能使用注释定义过滤器执行顺序。但是,为了最大程度地减少使用量,仅用a注释所有过滤器就足够了,这样您就不需要定义,而只需按所需顺序定义即可。 例如, 与w