【JavaWeb】过滤器Filter

18 篇文章 0 订阅

【JavaWeb】过滤器Filter

1、概念

过滤器可以拦截到指定的请求,对该请求拦截后可以进行对请求和响应进行操作,然后放行,可以自己去寻找对应的servlet或者其他过滤器。

使用的业务场景:

用户在客户端发送请求----> 拦截验证:是否为登陆的状态(session),如果是放行,不是的话跳转登陆。

定义:

servlet定义的一个web组件,用来拦截servlet请求,以便获取请求中的资源的参数,过滤的对象主要是客户端请求的web资源。

优点:

热插拔,随时用,随时也可以去掉,不会影响代码的执行。

使用:

1、书写一个类实现Filter接口。
2、重写接口的三个方法,分别是初始化,执行连接,销毁
3、配置注解@WebFilter,将需要过滤的页面的请求地址写入注解(也可以在web.xml中配置)

2、案例

// 拦截全部的请求
@WebFilter("/*")
public class CheckLoginFilter implements Filter {
    // 初始化过滤器,一般用来初始化一些参数
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

        // 初始化一些参数 encoding = utf-8;
    }

    // 过滤器执行业务的方法
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // 转化对象,方便操作
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        // 做业务
        request.setCharacterEncoding("utf-8");
        // 验证是否登陆过:判断当前会话中是否包含user对象
        HttpSession session = request.getSession();
        // 获得当前对象
        Object user = session.getAttribute("user");
        // !!!要排除一些默认页面
        // 获取所有的请求资源
        String path = request.getRequestURI();
        // 判断path是否包含index.jsp
        if (path.contains("login.jsp")||path.contains("login")){
            filterChain.doFilter(request,response);
        }else{
            // user为空,对象没有绑定,没有登陆
            if (user == null) {
                response.sendRedirect("login.jsp");
            } else {
            // 可以用转发给下一个页面,但是太麻烦  不能转发给下一个过滤器,系统提供了filterChain
            // 直接使用filterChain的doFilter方法,自动去找寻,如果还有下一个过滤器,直接跳转下一个过滤器
            // 如果没有过滤器,会直接跳转对应的servlet,处理业务
                filterChain.doFilter(request,response);
            }
        } 
    }

    @Override
    public void destroy() {
 				System.out.println("我被销毁了");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值