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的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot配置属性之MQ

SpringBoot配置属性之Migration

SpringBoot配置属性之Server

SpringBoot配置属性系列-之DataSource

5.springcloud微服务架构搭建 之 《springboot集成Hystrix》

SpringBoot学习路线大全之SpringBoot与分布式保姆式教程