注解方式的过滤器(Filter)不能过滤Servlet(注解方式)的问题

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。


例如 @WebFilter(
urlPatterns = { 
"/jsps/cart/*", 
"/jsps/order/*",
"/CartServlet", 
"/OrderServlet"
}, 
servletNames = { 
"CartServlet", 
"OrderServlet"
})
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值