过滤器、监听器、拦截器

1.过滤器

过滤器Filter是Servlet的规范。(jarkata.servlet.Filter)

默认情况下,在服务器启动的时候会新建Filter对象。

1.1过滤器的方法

init方法:在Filter对象第一次被创建之后调用,并且只调用一次
doFilter方法:只要用户发送一次请求,则执行一次。发送N次请求,则执行N次。在这个方法中编写过滤规则。
destroy方法:在Filter对象被释放/销毁之前调用,并且只调用一次。

1.2过滤器的生命周期,过滤器链的执行顺序

Filter的生命周期和Servlet生命周期类似,唯一不同的是Filter默认在服务器启动的时候创建。

过滤器链的执行顺序:
通过web.xml配置文件配置,则从上到下执行;
通过注解配置,则根据字典的顺序执行。

1.3如何使用过滤器?

@WebFilter("/user/list")
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        String filterName = filterConfig.getFilterName();
        ServletContext servletContext = filterConfig.getServletContext();
        String parameter = filterConfig.getInitParameter("xxx");
        Enumeration<String> initParameterNames = filterConfig.getInitParameterNames();
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 请求前过滤规则,request
        // 这个方法:执行下一个过滤器,如果下面没有过滤器了,执行最终的Servlet
        chain.doFilter(request,response);
        // 请求完成后的过滤,response
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

2.监听器

监听器Listener也是Servlet的规范。
所有监听器中的方法都是不需要javaweb程序员调用的,由服务器来负责调用:当某个特殊的事件发生之后,被web服务器自动调用。

2.1Servlet规范中提供了哪些监听器?

jakarta.servlet包下:

  • ServletContextListener
  • ServletContextAttributeListener
  • ServletRequestListener
  • ServletRequestAttributeListener

jakarta.servlet.http包下:

  • HttpSessionListener

  • HttpSessionAttributeListener
    该监听器需要使用@WebListener注解进行标注。
    该监听器监听的是什么?是session域中数据的变化。只要数据变化,则执行相应的方法。主要监测点在session域对象上。

  • HttpSessionBindingListener
    该监听器不需要使用@WebListener进行标注。
    假设User类实现了该监听器,那么User对象在被放入session的时候触发bind事件,User对象从session中删除的时候,触发unbind事件。
    假设Customer类没有实现该监听器,那么Customer对象放入session或者从session删除的时候,不会触发bind和unbind事件。

  • HttpSessionIdListener:session的id发生改变的时候,监听器中的唯一一个方法就会被调用。

  • HttpSessionActivationListener
    1:监听session对象的钝化和活化的。
    2:钝化:session对象从内存存储到硬盘文件。
    3:活化:从硬盘文件把session恢复到内存。

拦截器教程

3.拦截器

拦截器Intercepter是springMVC的规范。

Spring MVC的拦截器作用是在请求到达控制器之前或之后进行拦截,可以对请求和响应进行一些特定的处理。

3.1拦截器使用场景

  1. 登录验证:对于需要登录才能访问的网址,使用拦截器可以判断用户是否已登录,如果未登录则跳转到登录页面。
  2. 权限校验:根据用户权限对部分请求地址进行访问控制,拒绝未经授权的用户访问。
  3. 请求日志:记录请求信息,例如请求地址、请求参数、请求时间等,用于排查问题和性能优化。
  4. 更改响应:可以对响应的内容进行修改,例如添加头信息、调整响应内容格式等。

3.2拦截器和过滤器的区别

  • 过滤器更注重在请求和响应的流程中进行处理,可以修改请求和响应的内容,例如设置编码和字符集、请求头、状态码等。
  • 拦截器则更加侧重于对控制器进行前置或后置处理,在请求到达控制器之前或之后进行特定的操作,例如打印日志、权限验证等。

在这里插入图片描述

3.3如何使用拦截器

实现org.springframework.web.servlet.HandlerInterceptor接口,共有三个方法可以进行选择性的实现:

@Component
public class MyIntercepter implements HandlerInterceptor {
    // 处理器方法调用之前执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;// 返回值:true放行,false拦截
    }
    // 处理器方法调用之后执行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }
    // 渲染完成后执行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值