SpringBoot定义过滤器、监听器、拦截器的方法
程序员文章站
2024-02-28 14:21:58
一、自定义过滤器
创建一个过滤器,实现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); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Lesson03_02 样式规则选择器
下一篇: 用好href的target属性