SpringBoot定义过滤器、监听器、拦截器的方法

一、自定义过滤器

创建一个过滤器,实现javax.servlet.Filter接口,并重写其中的init、doFilter、destory方法。

package com.example.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
/**
 * 实现javax.servlet.Filter,覆盖其三个方法
 * @author Administrator
 *
 */
@WebFilter(filterName="customFilter",urlPatterns="/*")
public class CustomFilter implements Filter{ 

  @Override
  public void destroy() {
    System.out.println("CustomFilter过滤器销毁"); 

  } 

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
      throws IOException, ServletException {
    System.out.println("CustomFilter指定过滤器操作......");
    //执行操作后必须doFilter
    chain.doFilter(request, response);
  } 

  @Override
  public void init(FilterConfig arg0) throws ServletException {
    System.out.println("CustomFilter初始化......");
  }
}

二、自定义监听器

创建一个过滤器,实现ServletContextListener接口

package com.example.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener; 

/**
 * 实现ServletContextListener,覆盖其两个方法
 * @author Administrator
 *
 */
@WebListener
public class CustomListener implements ServletContextListener{ 

  @Override
  public void contextDestroyed(ServletContextEvent servletContext) {
    System.out.println("servletContext销毁......"); 

  } 

  @Override
  public void contextInitialized(ServletContextEvent servletContext) {
    System.out.println("servletContext初始化......");
  } 

}

创建一个session监听器,监听session的创建和销毁

package com.example.listener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener; 

/**
 * 实现HttpSessionListener接口,监视session的动态
 * @author Administrator
 *
 */
@WebListener
public class SessionListener implements HttpSessionListener{ 

  @Override
  public void sessionCreated(HttpSessionEvent session) {
    System.out.println("session创建成功......"); 

  } 

  @Override
  public void sessionDestroyed(HttpSessionEvent session) {
    System.out.println("session销毁......"); 

  } 

}

三、自定义拦截器

步骤:

1、创建自己的拦截器实现HandlerInterceptor接口

2、创建自己的拦截器链,继承WebMvcConfigurerAdapter类,重写addInterceptors方法。

3、实例化自己的拦截器,并加入到拦截器链中。

拦截器一:

package com.example.Interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; 

public class CustomInterceptor implements HandlerInterceptor { 

  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object,
      Exception exception) throws Exception {
    //在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
    System.out.println("3. 整个请求结束之后被调用......CustomInterceptor1......");
  } 

  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view)
      throws Exception {
    // 请求处理之后进行调用,但是在视图被渲染之前
    System.out.println("2. 请求处理之后进行调用,但是在视图被渲染之前......CustomInterceptor1......");
  } 

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
    // 在请求处理之前进行调用
    System.out.println("1. 在请求处理之前进行调用......CustomInterceptor1......");
    // 只有返回true才会继续向下执行,返回false取消当前请求
    return true;
  } 

}

拦截器二:

package com.example.Interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; 

public class CustomInterceptor2 implements HandlerInterceptor { 

  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object,
      Exception exception) throws Exception {
    //在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
    System.out.println("3. 整个请求结束之后被调用......CustomInterceptor2......");
  } 

  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view)
      throws Exception {
    // 请求处理之后进行调用,但是在视图被渲染之前
    System.out.println("2. 请求处理之后进行调用,但是在视图被渲染之前......CustomInterceptor2......");
  } 

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
    // 在请求处理之前进行调用
    System.out.println("1. 在请求处理之前进行调用......CustomInterceptor2......");
    // 只有返回true才会继续向下执行,返回false取消当前请求
    return true;
  } 

}

自定义拦截器链并加入自定义的拦截器

package com.example.adapter; 

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

import com.example.Interceptor.CustomInterceptor;
import com.example.Interceptor.CustomInterceptor2; 

/**
 * 继承WebMvcConfigurerAdapter,复写addInterceptors方法
 * @author Administrator
 *
 */
@Configuration
public class WebAdapter extends WebMvcConfigurerAdapter{ 

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    //众多的拦截器组成了一个拦截器链
    /**
     * 主要方法说明:
     * addPathPatterns 用于添加拦截规则
     * excludePathPatterns 用户排除拦截
     */
    registry.addInterceptor(new CustomInterceptor()).addPathPatterns("/*");
    registry.addInterceptor(new CustomInterceptor2()).addPathPatterns("/*");
    super.addInterceptors(registry);
  }
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 浅谈Spring-boot事件监听

    springboot的事件监听:为bean之间的消息通信提供支持.当一个bean做完一件事以后,通知另一个bean知晓并做出相应处理.这时,我们需要另一个bean,监听当前bean所发生的事件. 实现步骤:四个步骤,四种方式 第一种方式 1.自定义事件,一般是继承ApplicationEvent抽象类 2.定义事件监听器,一般是实现ApplicationListener接口 3.1)把监听器加入到SpringApplication中:ApplicationListener.addListener

  • Spring Boot的listener(监听器)简单使用实例详解

    监听器(Listener)的注册方法和 Servlet 一样,有两种方式:代码注册或者注解注册 1.代码注册方式 通过代码方式注入过滤器 @Bean public ServletListenerRegistrationBean servletListenerRegistrationBean(){ ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean

  • SpringBoot使用过滤器、拦截器和监听器的案例代码(Springboot搭建java项目)

    目录 SpringBoot使用过滤器.拦截器和监听器 一.SpringBoot使用过滤器 Spring boot过滤器的使用(两种方式) 方式一: 方式二: 二.SpringBoot使用拦截器 三.过滤器和拦截器的执行顺序 四.SpringBoot使用监听器 1.统计网站最多在线人数监听器的例子 2.springboot监听器的使用(以实现异步Event监听为例子) SpringBoot使用过滤器.拦截器和监听器 一.SpringBoot使用过滤器 Spring boot过滤器的使用(两种方式)

  • SpringBoot实现过滤器、拦截器与切片的实现和区别

    Q:使用过滤器.拦截器与切片实现每个请求耗时的统计,并比较三者的区别与联系 过滤器Filter 过滤器概念 Filter是J2E中来的,可以看做是 Servlet 的一种"加强版",它主要用于对用户请求进行预处理和后处理,拥有一个典型的 处理链 .Filter也可以对用户请求生成响应,这一点与Servlet相同,但实际上很少会使用Filter向用户请求生成响应.使用Filter完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行预处理并生成响应,最后Filt

  • SpringBoot 过滤器、拦截器、监听器对比及使用场景分析

    一.关系图理解 二.区别 1.过滤器 过滤器是在web应用启动的时候初始化一次, 在web应用停止的时候销毁 可以对请求的URL进行过滤, 对敏感词过滤 挡在拦截器的外层 实现的是 javax.servlet.Filter 接口 ,是 Servlet 规范的一部分 在请求进入容器后,但在进入servlet之前进行预处理,请求结束是在servlet处理完以后 依赖Web容器 会多次执行 过滤器简介 过滤器的英文名称为 Filter, 是 Servlet 技术中最实用的技术.如同它的名字一样,过滤器

  • SpringBoot过滤器与拦截器深入分析实现方法

    目录 过滤器 编写过滤器 注册过滤器 基于 FilterRegistrationBean 基于 @WebFilter 拦截器 过滤器 实现过滤器需要实现 javax.servlet.Filter 接口.重写三个方法.其中 init() 方法在服务启动时执行,destroy() 在服务停止之前执行. 可用两种方式注册过滤器: 使用 FilterRegistrationBean 来注入.可使用 setOrder(0) 设置过滤器的优先级,越小优先级越高. 使用 @WebFilter(filterNa

  • 详解SpringBoot中自定义和配置拦截器的方法

    目录 1.SpringBoot版本 2.什么是拦截器 3.工作原理 4.拦截器的工作流程 4.1正常流程 4.2中断流程 5.应用场景 6.如何自定义一个拦截器 7.如何使其在Spring Boot中生效 8.实际使用 8.1场景模拟 8.2思路 8.3实现过程 8.4效果体验 9.总结 1.SpringBoot版本 本文基于的Spring Boot的版本是2.6.7 . 2.什么是拦截器 Spring MVC中的拦截器(Interceptor)类似于ServLet中的过滤器(Filter),它

  • SpringBoot面试突击之过滤器和拦截器区别详解

    目录 实现过滤器和拦截器 a) 实现过滤器 b) 实现拦截器 过滤器 VS 拦截器 1.出身不同 2.触发时机不同 3.实现不同 4.支持的项目类型不同 5.使用的场景不同 总结 实现过滤器和拦截器 首先,我们先来看一下二者在 Spring Boot 项目中的具体实现,这对后续理解二者的区别有很大的帮助. a) 实现过滤器 过滤器可以使用 Servlet 3.0 提供的 @WebFilter 注解,配置过滤的 URL 规则,然后再实现 Filter 接口,重写接口中的 doFilter 方法,具

  • springboot config 拦截器使用方法实例详解

    本文介绍Spring-Boot中使用拦截器,一般在拦截器中处理跨域处理,允许跨域访问项目,拦截器使用详细资料请查阅官网. 实现自定义拦截器步骤: 1.创建一个类并实现HandlerInterceptor接口. 2.创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法. 2.将自定义的拦截器交由spring管理,然后将对像手动添加到拦截器链中(在addInterceptors方法中添加). 创建拦截器类 package com.exam

  • 详谈springboot过滤器和拦截器的实现及区别

    前言 springmvc中有两种很普遍的AOP实现: 1.过滤器(Filter) 2.拦截器(Interceptor) 本篇面对的是一些刚接触springboot的人群 所以主要讲解filter和interceptor的简单实现和它们之间到底有什么区别 (一些复杂的功能我会之后发出文章,请记得关注) Filter的简单实现 字面意思:过滤器就是过滤的作用,在web开发中过滤一些我们指定的url 那么它能帮我们过滤什么呢? 那功能可就多了: 比如过拦截掉我们不需要的接口请求 修改请求(reques

  • springboot过滤器和拦截器的实例代码

    拦截器与过滤器 在讲Spring boot之前,我们先了解一下过滤器和拦截器.这两者在功能方面很类似,但是在具体技术实现方面,差距还是比较大的.在分析两者的区别之前,我们先理解一下AOP的概念,AOP不是一种具体的技术,而是一种编程思想.在面向对象编程的过程中,我们很容易通过继承.多态来解决纵向扩展. 但是对于横向的功能,比如,在所有的service方法中开启事务,或者统一记录日志等功能,面向对象的是无法解决的.所以AOP--面向切面编程其实是面向对象编程思想的一个补充.而我们今天讲的过滤器和拦

  • SpringBoot 过滤器与拦截器实例演示

       SpringBoot中的过滤器拦截器操作与springmvc中的几乎一样所以这里也不过多介绍了,下面举两个简单的栗子演示一下 1.过滤器         1 创建过滤器类LoginFilter,实现servlet包下的Filter接口(包不要导错),加入注解WebFilter package com.example.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.

随机推荐