https://www.aliyun.com/jiaocheng/778495.html
- 摘要:今天写filter(过滤器)的时候,碰到一个奇怪的问题,发现filter可以过滤urlPatterns,但是无法过滤servlet。Servlet部分代码如下(注解方式创建):@WebServlet("/CartItemServlet")publicclassCartItemServletextendsHttpServlet{filter部分代码如下:@WebFilter(urlPatterns={"/jsps/cart/*",&quo
今天写filter(过滤器)的时候,碰到一个奇怪的问题,发现filter可以过滤urlPatterns,但是无法过滤servlet。
Servlet部分代码如下(注解方式创建):
@WebServlet("/CartItemServlet")
public class CartItemServletextends HttpServlet {
filter部分代码如下:
@WebFilter( urlPatterns = { "/jsps/cart/*", "/jsps/order/*" }, servletNames = { "CartItemServlet", "OrderServlet" }) public class LoginFilter implements Filter {
测试结果:
1.LoginFilter 可以过滤 urlPatterns 的请求 ,但无法过滤 servletNames 里的Servlet
2. 如果在web.xml文件中配置servlet的方式,有可以过滤。
难道就非要使用web.xml配置的方式不可么。
经过仔细研究发现,filter在查找servlet是通过servletNames进行查找的。而servlet注解方式创建的时候,默认是没有给servlet命名的,只是给了一个urlPatterns。导致filter找不到servlet,自然就无法完成过滤。
解决方案:
修改servlet的注解,指定servlet的name。
修改后:
@WebServlet(name="CartItemServlet", urlPatterns="/CartItemServlet")
再测试,filter可以成功过滤servlet。
urlPatterns = {
"/jsps/cart/*",
"/jsps/order/*",
"/CartServlet",
"/OrderServlet"
},
servletNames = {
"CartServlet",
"OrderServlet"
})