SpringBoot之HandlerInterceptorAdapter
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot之HandlerInterceptorAdapter相关的知识,希望对你有一定的参考价值。
参考技术A在SpringBoot中我们可以使用HandlerInterceptorAdapter这个适配器来实现自己的拦截器。这样就可以拦截所有的请求并做相应的处理。
应用场景
在HandlerInterceptorAdapter中主要提供了以下的方法:
preHandle:在方法被调用前执行。在该方法中可以做类似校验的功能。如果返回true,则继续调用下一个拦截器。如果返回false,则中断执行,也就是说我们想调用的方法 不会被执行,但是你可以修改response为你想要的响应。
postHandle:在方法执行后调用。
afterCompletion:在整个请求处理完毕后进行回调,也就是说视图渲染完毕或者调用方已经拿到响应。
在HandlerInterceptorAdapter中主要提供了以下的方法:
HandlerInterceptor
拦截器适配器HandlerInterceptorAdapter
有时候我们可能只需要实现三个回调方法中的某一个,如果实现HandlerInterceptor接口的话,三个方法必须实现,不管你需不需要,此时spring提供了一个HandlerInterceptorAdapter适配器(种适配器设计模式的实现),允许我们只实现需要的回调方法。
这样在我们业务中比如要记录系统日志,日志肯定是在afterCompletion之后记录的,否则中途失败了,也记录了,那就扯淡了。一定是程序正常跑完后,我们记录下那些对数据库做个增删改的操作日志进数据库。所以我们只需要继承HandlerInterceptorAdapter,并重写afterCompletion一个方法即可,因为preHandle默认是true。
运行流程总结如下:
下面用一个demo来演示执行流程
定义一个类继承HandlerInterceptorAdapter,并重写方法
快捷键ctrl+o打开可以重写的方法面板选择
WebMvcConfigurerAdapter 抽象类是对WebMvcConfigurer接口的简单抽象(增加了一些默认实现),但在在SpringBoot2.0及Spring5.0中WebMvcConfigurerAdapter已被废弃 。官方推荐直接实现WebMvcConfigurer或者直接继承WebMvcConfigurationSupport
实现WebMvcConfigurer配置拦截器
在控制器中写一个方法并访问
会在控制台输出
此时在加入一个拦截器,会按照配置的顺序执行,配置如下
控制的输出反映了配置多个拦截器的执行流程:
如果controller出现异常,则不会继续执行postHandle,只会倒序执行afterCompletion方法
咱们下期见。
SpringBoot配置属性之NOSQL
SpringBoot配置属性系列
另外附上个人关于springboot的一些文章
cache
-
spring.cache.cache-names
指定要创建的缓存的名称,逗号分隔(若该缓存实现支持的话) -
spring.cache.ehcache.config
指定初始化EhCache时使用的配置文件的位置指定. -
spring.cache.guava.spec
指定创建缓存要使用的spec,具体详见CacheBuilderSpec. -
spring.cache.hazelcast.config
指定初始化Hazelcast时的配置文件位置 -
spring.cache.infinispan.config
指定初始化Infinispan时的配置文件位置. -
spring.cache.jcache.config
指定jcache的配置文件. -
spring.cache.jcache.provider
指定CachingProvider实现类的全限定名. -
spring.cache.type
指定缓存类型
mongodb
-
spring.mongodb.embedded.features
指定要开启的特性,逗号分隔. -
spring.mongodb.embedded.version
指定要使用的版本,默认: 2.6.10
redis
-
spring.redis.database
指定连接工厂使用的Database index,默认为: 0 -
spring.redis.host
指定Redis server host,默认为: localhost -
spring.redis.password
指定Redis server的密码 -
spring.redis.pool.max-active
指定连接池最大的活跃连接数,-1表示无限,默认为8 -
spring.redis.pool.max-idle
指定连接池最大的空闲连接数,-1表示无限,默认为8 -
spring.redis.pool.max-wait
指定当连接池耗尽时,新获取连接需要等待的最大时间,以毫秒单位,-1表示无限等待 -
spring.redis.pool.min-idle
指定连接池中空闲连接的最小数量,默认为0 -
spring.redis.port
指定redis服务端端口,默认: 6379 -
spring.redis.sentinel.master
指定redis server的名称 -
spring.redis.sentinel.nodes
指定sentinel节点,逗号分隔,格式为host:port. -
spring.redis.timeout
指定连接超时时间,毫秒单位,默认为0
springdata
-
spring.data.elasticsearch.cluster-name
指定es集群名称,默认: elasticsearch -
spring.data.elasticsearch.cluster-nodes
指定es的集群,逗号分隔,不指定的话,则启动client node. -
spring.data.elasticsearch.properties
指定要配置的es属性. -
spring.data.elasticsearch.repositories.enabled
是否开启es存储,默认为: true -
spring.data.jpa.repositories.enabled
是否开启JPA支持,默认为: true -
spring.data.mongodb.authentication-database
指定鉴权的数据库名 -
spring.data.mongodb.database
指定mongodb数据库名 -
spring.data.mongodb.field-naming-strategy
指定要使用的FieldNamingStrategy. -
spring.data.mongodb.grid-fs-database
指定GridFS database的名称. -
spring.data.mongodb.host
指定Mongo server host. -
spring.data.mongodb.password
指定Mongo server的密码. -
spring.data.mongodb.port
指定Mongo server port. -
spring.data.mongodb.repositories.enabled
是否开启mongodb存储,默认为true -
spring.data.mongodb.uri
指定Mongo database URI.默认:mongodb://localhost/test -
spring.data.mongodb.username
指定登陆mongodb的用户名. -
spring.data.rest.base-path
指定暴露资源的基准路径. -
spring.data.rest.default-page-size
指定每页的大小,默认为: 20 -
spring.data.rest.limit-param-name
指定limit的参数名,默认为: size -
spring.data.rest.max-page-size
指定最大的页数,默认为1000 -
spring.data.rest.page-param-name
指定分页的参数名,默认为: page -
spring.data.rest.return-body-on-create
当创建完实体之后,是否返回body,默认为false -
spring.data.rest.return-body-on-update
在更新完实体后,是否返回body,默认为false -
spring.data.rest.sort-param-name
指定排序使用的key,默认为: sort -
spring.data.solr.host
指定Solr host,如果有指定了zk的host的话,则忽略。默认为: http://127.0.0.1:8983/solr -
spring.data.solr.repositories.enabled
是否开启Solr repositories,默认为: true -
spring.data.solr.zk-host
指定zk的地址,格式为HOST:PORT.
以上是关于SpringBoot之HandlerInterceptorAdapter的主要内容,如果未能解决你的问题,请参考以下文章