当前位置: 首页 > 面试题库 >

如何使用WAR中的注释定义servlet过滤器的执行顺序

章玮
2023-03-14
问题内容

如果我们在WAR自己中定义特定于Webapp的servlet过滤器web.xml,则过滤器的执行顺序将与中定义的顺序相同web.xml

但是,如果我们使用@WebFilter批注定义这些过滤器,那么过滤器的执行顺序是什么,如何确定执行顺序?


问题答案:

您确实不能使用@WebFilter注释定义过滤器执行顺序。但是,为了最大程度地减少web.xml使用量,仅用a注释所有过滤器就足够了,filterName这样您就不需要<filter>定义,而只需<filter-mapping>按所需顺序定义即可。

例如,

@WebFilter(filterName="filter1")
public class Filter1 implements Filter {}

@WebFilter(filterName="filter2")
public class Filter2 implements Filter {}

与web.xml只是这样:

<filter-mapping>
    <filter-name>filter1</filter-name>
    <url-pattern>/url1/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>filter2</filter-name>
    <url-pattern>/url2/*</url-pattern>
</filter-mapping>

如果您希望将网址格式保留在中@WebFilter,则可以这样做,

@WebFilter(filterName="filter1", urlPatterns="/url1/*")
public class Filter1 implements Filter {}

@WebFilter(filterName="filter2", urlPatterns="/url2/*")
public class Filter2 implements Filter {}
但您仍应保留<url-pattern>in

web.xml,因为XSD要求它是必需的,尽管它可以为空:

<filter-mapping>
    <filter-name>filter1</filter-name>
    <url-pattern />
</filter-mapping>
<filter-mapping>
    <filter-name>filter2</filter-name>
    <url-pattern />
</filter-mapping>

不管采用哪种方法,这一切都将在Tomcat 7.0.28版之前失败,因为它会在不存在的<filter-mapping>情况下窒息<filter>



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

  • 我正在寻找一种有效地针对JUnit5集成测试的方法。测试使用gradle运行,所有集成测试类都由自定义类级别注释修饰。我可以根据它们的类名模式或通过使用标记对它们进行分类来筛选它们,但是有没有一种方法可以设置一个针对带有注释的测试的测试套件呢?

  • 问题内容: 我已经使用Jersey实现了REST服务。为了让更多的安全,我加入了球衣安全注解为REST方法(,)。 以下是我的示例REST服务: 但是问题是,以前我使用过滤器来验证URI。 web.xml: 根据访问某些REST服务,应包含一个有效的令牌(由应用程序生成)。 某些REST端点不需要令牌即可访问服务。在这种情况下,我必须绕过过滤器的实现: 所以我的要求是这样的。 如果我们声明了某个R

  • 不论是客户端,还是服务器,都可以添加多个过滤器。假设我们按照添加的顺序把它们叫做 filter1, filter2, … filterN。那幺它们的执行顺序是这样的。 在客户端的执行顺序 +------------------- OutputFilter -------------------+ | +-------+ +-------+ +-------

  • 根据我的理解,过滤器的执行顺序是它们在web中定义的顺序。用于相同url映射的xml。但是,如果我们在容器的web上为同一url映射定义了多个过滤器,那么我找不到任何关于这种行为的参考。xml和单个应用程序的web。xml 我的假设是,因为应用程序是作为容器的一部分部署的,比如tomcat,它有web。xml本身,以及针对每个部署的应用程序的任何请求,都必须通过tomcat/conf/web中定义

  • 问题内容: 我正在尝试找到一种方法,可将请求从过滤器重定向到登录页面,但我不知道如何从servlet重定向。我搜索了,但发现的是方法。我在过滤器的响应对象上找不到此方法。是什么原因 我该如何解决? 问题答案: 在Filter中,响应是而不是。因此将强制转换为。 如果使用上下文路径: 也不要忘记在最后打电话。