springboot添加拦截器
拦截器也是我们经常需要使用的,在springboot中该如何配置呢?
拦截器不是一个普通属性,而是一个类,所以就要用到java配置方式了。
在springboot官方文档中有这么一段说明:
if you want to keep spring boot mvc features and you want to add additional mvc configuration (interceptors, formatters, view controllers, and other features), you can add your own @configuration class of type webmvcconfigurer but without @enablewebmvc. if you wish to provide custom instances of requestmappinghandlermapping, requestmappinghandleradapter, or exceptionhandlerexceptionresolver, you can declare a webmvcregistrationsadapter instance to provide such components.
if you want to take complete control of spring mvc, you can add your own @configuration annotated with @enablewebmvc.
翻译:
如果你想要保持spring boot 的一些默认mvc特征,同时又想自定义一些mvc配置(包括:拦截器,格式化器, 视图控制器、消息转换器 等等),你应该让一个类实现webmvcconfigurer,并且添加@configuration注解,但是千万不要加@enablewebmvc注解。
如果你想要自定义handlermapping、handleradapter、exceptionresolver等组件,你可以创建一个webmvcregistrationsadapter实例 来提供以上组件。
如果你想要完全自定义springmvc,不保留springboot提供的一切特征,你可以自己定义类并且添加@configuration注解和@enablewebmvc注解
首先我们定义一个拦截器
@component
//继承handlerinterceptor
public class myinterceptor implements handlerinterceptor {
@override
public boolean prehandle(httpservletrequest request, httpservletresponse response, object handler) throws exception {
system.out.println("prehandle method is running!");
return true;
}
@override
public void posthandle(httpservletrequest request, httpservletresponse response, object handler, modelandview modelandview) throws exception {
system.out.println("posthandle method is running!");
}
@override
public void aftercompletion(httpservletrequest request, httpservletresponse response, object handler, exception ex) throws exception {
system.out.println("aftercompletion method is running!");
}
}
定义配置类,注册拦截器
@configuration
//实现`webmvcconfigurer`,并且添加`@configuration`注解
public class mvcconfiguration implements webmvcconfigurer {
//注入定义的拦截器
@autowired
private handlerinterceptor myinterceptor;
/**
* 重写接口中的addinterceptors方法,添加自定义拦截器
* @param registry
*/
@override
public void addinterceptors(interceptorregistry registry) {
/*拦截路径*/ registry.addinterceptor(myinterceptor).addpathpatterns("/**");
}
}
接下来运行并查看日志
prehandle method is running!
posthandle method is running!
aftercompletion method is running!
你会发现日志中只有这些打印信息,springmvc的日志信息都没有,因为springmvc记录的log级别是debug,springboot默认是显示info以上,我们需要进行配置。
springboot通过logging.level.*=debug来配置日志级别,*填写包名
# 设置org.springframework包的日志级别为debug logging.level.org.springframework=debug
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论