您好,欢迎访问一九零五行业门户网

springboot中过滤器和拦截器的实现方法介绍(代码)

本篇文章给大家带来的内容是关于springboot中过滤器和拦截器的实现方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
过滤器和拦截器二者都是aop编程思想的提现,都能实现诸如权限检查、日志记录等。二者有一定的相似之处,不同的地方在于:
filter是servlet规范,只能用在web程序中,而拦截器是spring规范,可以用在web程序中,也可以用在application程序中。
filter是servlet中定义的,依赖servlet容器。而拦截器在spring中定义,依赖spring容器。
拦截器是一个spring组件,归spring管理,配置在spring的配置文件中,因此它可使用spring的任何资源。比如service、数据源等,通过ioc容器注入到拦截器即可,而filter则不行。
filter只在servlet前后起作用,而拦截器则能深入到方法前后,异常抛出前后。使用深度更大一些。
spring中实现过滤器filter方法1:使用springboot提供的 filterregistrationbean注册自定义过滤器
public class myfilter implements filter { @override public void init(filterconfig filterconfig) throws servletexception { system.out.println("myfilter init..."); } @override public void dofilter(servletrequest servletrequest, servletresponse servletresponse, filterchain filterchain) throws ioexception, servletexception { //站点图标/favicon.ico filter会执行2次 httpservletrequest request=(httpservletrequest) servletrequest; system.out.println(request.getrequesturi()); system.out.println("myfilter dofilter..."); filterchain.dofilter(servletrequest,servletresponse); } @override public void destroy() { }}
在springboot中注册filter
@configurationpublic class filterconfig { @bean public filterregistrationbean registrationbean(){ filterregistrationbean myfilter=new filterregistrationbean(new myfilter()); myfilter.addurlpatterns("/*"); return myfilter; }
到这里运行demo时会发现do filter执行了2次,debug发现这是因为浏览器请求时站点图标管理,通过uri能发现。可以根据自己的需求用正则表达式适当控制。
方法2:servlet注解定义filter
@component@webfilter(filtername = "myfilter2",urlpatterns = "/*")public class myfilter2 implements filter { @override public void init(filterconfig filterconfig) throws servletexception { system.out.println("myfilter2 init..."); } @override public void dofilter(servletrequest servletrequest, servletresponse servletresponse, filterchain filterchain) throws ioexception, servletexception { system.out.println("myfilter2 dofilter ..."); filterchain.dofilter(servletrequest,servletresponse); } @override public void destroy() { }}
使用servleta注解声明的filter,执行时只有一次请求。和使用spring配置filter这里不同。
spring中实现拦截器 拦截器主要使用自定义类集成handlerinterceptor。prehandle返回true时程序才会继续向下执行,返回false则中断请求。
public class myinterceptor implements handlerinterceptor { @override public boolean prehandle(httpservletrequest request, httpservletresponse response, object handler) throws exception { system.out.println("/prehandler"); return true; } @override public void posthandle(httpservletrequest request, httpservletresponse response, object handler, @nullable modelandview modelandview) throws exception { system.out.println("posthandler"); } @override public void aftercompletion(httpservletrequest request, httpservletresponse response, object handler, @nullable exception ex) throws exception { system.out.println("aftercompletion"); }}
在程序中配置拦截器并声明拦截规则
@configurationpublic class interceptorconfig implements webmvcconfigurer { @override public void addinterceptors(interceptorregistry registry) { registry.addinterceptor(new myinterceptor()).addpathpatterns("/*"); }}
运行结果
以上就是springboot中过滤器和拦截器的实现方法介绍(代码)的详细内容。
其它类似信息

推荐信息