gpt4 book ai didi

java - 当我在 tomcat 的 web.xml 中的过滤器之前配置一个 servlet 时会发生什么?

转载 作者:行者123 更新时间:2023-11-28 22:24:02 26 4
gpt4 key购买 nike

在 tomcat 中,对于某个 url,我想跳过所有过滤器并执行一个 servlet,我认为将 servlet 放在过滤器之前会如我所料,但 servlet 映射后面的过滤器仍在执行。我做错了什么吗?

例如,这是我的 web.xml


<servlet>
<servlet-name>APIRedirection</servlet-name>
<servlet-class>com.test.APIRedirection</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>APIRedirection</servlet-name>
<url-pattern>/abc/*</url-pattern>
</servlet-mapping>

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

因此,当传入的 url 包含“/abc/”时,我希望我的 servlet 执行并跳过过滤器。我将我的 servlet 放在所有过滤器之前,但当传入的 url 包含“/abc/”时,过滤器仍然会被执行。

最佳答案

过滤器之前没有servlet的概念。

如果 servlet url 映射限定过滤器 url 映射,则过滤器在 servlet 之前执行。
我收到了您的要求,您只是不想点击某些网址的过滤器。
A。如果您的应用程序仍处于启动阶段,您可以按以下配置

<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/filtered/servlet1</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/filtered/servlet2</url-pattern>
</servlet-mapping>

...
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/filtered/*</url-pattern>
</filter-mapping>

以及您要绕过过滤器的 servlet url

<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/unfiltered/servlet1</url-pattern>
</servlet-mapping>

2。如果您的应用程序已经开发,并且您已经使用映射 /* 配置了一个过滤器,那么您不能跳过正在执行的过滤器。但是您可以在该过滤器之前再添加一个过滤器。这里过滤器顺序起着重要作用,(reference for filter order)您可以执行您期望从 servlet 获得的相同功能。在您的过滤器中,您只需打破过滤器链并发送响应,如下所示

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException
{
//your business logic
// construct responseToSend
response.getOutputStream().write(responseToSend);
return;
}

For more information of breaking filter chain refer this question

关于java - 当我在 tomcat 的 web.xml 中的过滤器之前配置一个 servlet 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56767940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com