SpringBoot配置拦截器的示例
程序员文章站
2022-03-14 20:16:44
在springboot中配置拦截器,主要有下面两个步骤:1、继承接口handlerinterceptor,根据需要重写其中的三个类。2、在配置类中注入该类。public class myinterce...
在springboot中配置拦截器,主要有下面两个步骤:
1、继承接口 handlerinterceptor,根据需要重写其中的三个类。
2、在配置类中注入该类。
public class myinterceptor implements handlerinterceptor { //controller执行之前 @override public boolean prehandle(httpservletrequest request, httpservletresponse response, object handler) throws exception { system.out.println("prehandler......"); return true; } //执行完controller执行之后、视图渲染前调用,可以在该方法里获取或者修改model @override public void posthandle(httpservletrequest request, httpservletresponse response, object handler, modelandview modelandview) throws exception { system.out.println("posthandler......"); } //一般用于清理资源 @override public void aftercompletion(httpservletrequest request, httpservletresponse response, object handler, exception ex) throws exception { system.out.println("aftercompletion......"); } }
@configuration public class webmvcconfig implements webmvcconfigurer { @override public void addinterceptors(interceptorregistry registry) { //1、全部拦截 // registry.addinterceptor(myinterceptor()).addpathpatterns("/**"); //2、拦截指定路径 registry.addinterceptor(myinterceptor()).addpathpatterns("/hello"); } @bean myinterceptor myinterceptor(){ return new myinterceptor(); } }
写个controller测试一下
@restcontroller public class hellocontroller { @requestmapping("/hello") public string hello(){ system.out.println("hello"); return "hello"; } @requestmapping("/world") public string world(){ system.out.println("world"); return "world"; } }
测试结果:
prehandler......
hello
posthandler......
aftercompletion......
world
springboot中还有一终拦截器,webrequestinterceptor
public class mywebrequestinterceptor implements webrequestinterceptor { @override public void prehandle(webrequest webrequest) throws exception { } @override public void posthandle(webrequest webrequest, modelmap modelmap) throws exception { } @override public void aftercompletion(webrequest webrequest, exception e) throws exception { } }
和handlerinterceptor比较相似,但是可以发现,该拦截器的prehandler返回值为空,说明该方法并不影响后面方法的执行。那么这个拦截器存在的目的是什么呐?
点进webrequest:
public interface webrequest extends requestattributes { @nullable string getheader(string var1); @nullable string[] getheadervalues(string var1); iterator<string> getheadernames(); @nullable string getparameter(string var1); @nullable string[] getparametervalues(string var1); iterator<string> getparameternames(); map<string, string[]> getparametermap(); locale getlocale(); string getcontextpath(); @nullable string getremoteuser(); @nullable principal getuserprincipal(); boolean isuserinrole(string var1); boolean issecure();
发现对reques请求中参数做了进一步处理(@nullable表示可以为空),更加的方便调用。所以两个拦截器的侧重点不同,handlerinterceptor功能较为强大,可以拦截请求,可以实现webrequestinterceptor的所有功能,只是要写的逻辑代码要多一点。更而webrequestinterceptor倾向于简化获取request参数的过程以及预设参数供后面的流程使用。
以上就是springboot配置拦截器的示例的详细内容,更多关于springboot配置拦截器的资料请关注其它相关文章!