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

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配置拦截器的资料请关注其它相关文章!