JavaWeb之Filter过滤器

Filter

1.概述

JavaWeb三大组件之一,其余两大组件是:Servlet程序和Listener监听器

JavaEE规范,是一个接口

作用:拦截请求、过滤响应

2.使用步骤:

1.编写一个类去实现 Filter 接口

2.实现过滤方法 doFilter()

3.到 web.xml 中去配置 Filter 的拦截路径

Filter 接口有三个方法:反应了  Filter 的生命周期。

  • init:只会在 web 程序加载的时候调用,即启动如tomcat等服务器时调用。一般负责加载配置的参数。初始化
  • destroy :web程序卸载的时候调用。一般负责关闭某些容器等。销毁
  • doFilter:每次客户端请求都会调用一次。Filter 的所有工作基本都集中在该方法中进行。过滤

代码练习

package com.su.filter;

import com.su.Bean.User;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebFilter("/*")
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("Filter...init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("Filter...执行过滤");
        //先把ServletRequest、ServletResponse转换为HttpServletRequest和HttpServletResponse
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;

        //1.获取请求的资源名称
        String path = request.getServletPath();
        System.out.println(path);

        //2.从session中获取登录的用户信息......session中有用户信息表示已登录,没有用户信息表示未登录
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        //System.out.println(user);

        //index.jsp、login.jsp、error.jsp、register.jsp、login、register这些页面或地址请求放行
        if(path.equals("/index.jsp") || path.equals("/login.jsp") || path.equals("/error.jsp") || path.equals("register.jsp") ||
                path.equals("/login") || path.equals("/register") ){
            //满足以上条件放行
            filterChain.doFilter(servletRequest,servletResponse);
        }else if(user!=null){
            //session中有用户信息表示已登录,没有用户信息表示未登录,已登录则放行
            filterChain.doFilter(servletRequest,servletResponse);
        }else{
            response.sendRedirect("login.jsp");
        }
    }

    @Override
    public void destroy() {
        System.out.println("Filter...destroy");
    }
}

进入首页,再进入zhuye.jsp被拦截;控制台日志信息

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值