Filter过滤器

Filter是javaWeb的重要组件,用于拦截请求和过滤响应。过滤器有构造、init、doFilter和destroy四个生命周期方法。在过滤器链中,多个Filter按顺序处理请求。文章提供了一个用户登录的案例,展示了如何使用Filter进行权限检查,未登录用户会被重定向到登录页面。
摘要由CSDN通过智能技术生成

1.过滤器的简介

        Filter过滤器是javaWeb的三大组件之一,是javaEE中的一套接口,用来拦截servlet请求以及过滤响应,通常在事务管理,权限检查等操作中会用到它

2.过滤器的生命周期

        Filter过滤器共包含四个生命周期

        1.构造方法

        2.init 初始化方法

              在 web 工程启动时即Filter创建时执行,可以对构造器进行相应的初始化操作

        3.doFilter方法

               每次拦截到请求时执行

        4.destroy方法

                停止 web 工程的时候就会执行这个方法,也就是销毁过滤器

3.过滤器链

        在 Web 应用中,可以部署多个 Filter,若这些 Filter 都拦截同一目标资源,则它们就组成了一个 Filter 链(也称过滤器链)。过滤器链中的每个过滤器负责特定的操作和任务,客户端的请求在这些过滤器之间传递,直到传递给目标资源。

        它的拦截过程如图所示:

         在浏览器对服务器发送请求时,会进入Filter1过滤器,并在Filter1中对请求进行拦截,经过Filter1处理请求之后,调用chain.doFilter()方法放行,并传递请求给Filter2过滤器,它以同样的方式调用doFilter()方法处理请求并最后发送请求给服务器,服务器做出响应后,过滤器也会以相反的顺序发生作用,将响应结果发送给客户端

4.案例代码演示

        用户登录代码案例:

        过滤器代码:

public class AdminFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpSession session = request.getSession();
        Object user = session.getAttribute("user");
        if(user==null){
            // 如果等于 null,说明还没有登录
            req.getRequestDispatcher("/login.jsp").forward(req,resp);
        }else{
            // 让程序继续往下访问用户的目标资源
            chain.doFilter(req,resp);
        }

    }
    public void destroy() {
    }
    public void init(FilterConfig config) throws ServletException {
    }
}

        servlet代码:

public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
        resp.setContentType("text/html; charset=UTF-8");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        if ("111111".equals(username) && "123456".equals(password)) {
            req.getSession().setAttribute("user",username);
            resp.getWriter().write("登录成功");
        } else {
            req.getRequestDispatcher("/login.jsp").forward(req,resp);
        }
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值