过滤器初探

为什么要引入过滤器

在web开发中,对于web客户端的每一个请求,我们需要进行相同的处理,比如判断用户是否有权限访问特定的web资源(Servlet,JSP页面等)。
当然我们可以在所有的web资源都增加相应的代码进行权限判断。
但显然这个方法不是最好的,因为增加了很多的重复性操作。于是过滤器就出现了。。。

什么是过滤器

它是一种向web应用程序的请求响应处理添加功能的web服务组件。
过滤器会对请求进行相应的处理操作。这样只需要编写一个过滤器,并将该过滤器添加到需要添加的页面,即可实现上面的功能,而且能够
大大的简化重复性的操作。

这里写图片描述

如何编写过滤器

1>编写一个Java类,实现Filter接口

//这里我们以一个判断用户是否登录的例子为例
public class UserFilter implements Filter {
    public void destroy() {
        //容器删除过滤器实例之前调用该方法,只执行一次
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) 
    throws ServletException, IOException {
      //过滤器的逻辑处理部分
      HttpServletRequest request = (HttpServletRequest)req;
      //判断用户是否登录(及Session值是否为空)
      HttpSession session = request.getSession();
      if (session.getAttribute("user") != null){
          chain.doFilter(req, resp);
          return;
      }
      request.setAttribute("error", "请先进行登录");
      //转发到登录操作
      request.getRequestDispatcher("/login").forward(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {
        //创建实例后,调用init方法,只执行一次
    }

}
关于chain.doFilter(req, resp);
作用:将请求转发到下一个过滤器,如果没有,就返回相应的资源。

特别注意

chain.doFilter(req, resp);下面的代码不能有请求,如果有,加上return.

2>为Servlet设置过滤器
在web.xml中进行设置

    <filter>
        <!--过滤器的名称,任意,与下面保持一致-->
        <filter-name>UserFilter</filter-name>
        <!--过滤器的项目路径(包名.类名)-->
        <filter-class>com.web.filter.UserFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>UserFilter</filter-name>
        <!--要过滤Servlet路径,过滤路径可设置多个-->
        <url-pattern>/blog</url-pattern>
        <url-pattern>/record</url-pattern>
    </filter-mapping>

当然,还可以进行一些初始化参数的配置,这里由于没有用到,就不进行讲解了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值