欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-01 10:07:40
一、自定义过滤器 创建一个过滤器,实现javax.servlet.filter接口,并重写其中的init、dofilter、destory方法。 package...

一、自定义过滤器

创建一个过滤器,实现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); 
  } 
} 

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