注解方式的过滤器(Filter)不能过滤Servlet(注解方式)的问题
注解方式的过滤器(Filter)不能过滤Servlet(注解方式)的问题
一片云里的天空 发表于5个月前
注解方式的过滤器(Filter)不能过滤Servlet(注解方式)的问题
  • 发表于 5个月前
  • 阅读 20
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

今天写filter(过滤器)的时候,碰到一个奇怪的问题,发现filter可以过滤urlPatterns,但是无法过滤servlet。

Servlet部分代码如下(注解方式创建):

@WebServlet("/CartItemServlet")

public class CartItemServlet extends 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。

 

共有 人打赏支持
粉丝 0
博文 5
码字总数 715
×
一片云里的天空
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: