前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot入门系列(十)如何使用拦截器,一学就会!

Spring Boot入门系列(十)如何使用拦截器,一学就会!

作者头像
架构师精进
发布2020-05-14 19:29:27
1.5K0
发布2020-05-14 19:29:27
举报
文章被收录于专栏:公众号文章

前面介绍了Spring Boot 如何整合定时任务已经Spring Boot 如何创建异步任务,不清楚的朋友可以看看之前的文章。

接下来开始讲 Spring Boot的重要功能:整合拦截器。以前我们在做mvc 项目时也使用到的是filter过滤器也就是拦截器。其实Spring Boot 中的拦截器和SpringMVC中的拦截器也是类似的,只是配置上有些区别。那么下面我们就来看看Spring Boot 是怎么配置拦截器的。

一、拦截器配置

创建InterceptorConfig 拦截器配置类,这个类主要是统一配置管理所有的拦截器。

代码语言:javascript
复制
package com.weiz.config;
import com.weiz.controller.interceptor.TwoInterceptor;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import com.weiz.controller.interceptor.OneInterceptor;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
@Configurationpublic class InterceptorConfig implements WebMvcConfigurer {
    @Resource    private OneInterceptor myInterceptor1;
    @Override    public void addInterceptors(InterceptorRegistry registry) {        //添加要拦截的url                1                 拦截的路径                                    放行的路径        registry.addInterceptor(myInterceptor1).addPathPatterns("/admin/**").excludePathPatterns("/admin/login");    }}

说明:

1、使用注解@Configuration配置拦截器

2、继承WebMvcConfigurer 接口

3、重写addInterceptors方法,添加需要的拦截器地址

二、自定义拦截器

前面创建了拦截器的配置管理类,接下来就应该创建具体的拦截器。首先创建com.weiz.controller.interceptor包,并创建OneInterceptor拦截器。

这个拦截器通过实现 HandlerInterceptor 接口,达到请求拦截的作用。具体代码如下:

代码语言:javascript
复制
package com.weiz.controller.interceptor;
import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;

public class OneInterceptor implements HandlerInterceptor  {
    /**     * 在请求处理之前进行调用(Controller方法调用之前)     */    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,             Object object) throws Exception {                System.out.println("被OneInterceptor拦截,放行...");return true;    }        /**     * 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)     */    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response,             Object object, ModelAndView mv)            throws Exception {        // TODO Auto-generated method stub            }        /**     * 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行     * (主要是用于进行资源清理工作)     */    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,             Object object, Exception ex)            throws Exception {        // TODO Auto-generated method stub            }}

说明:

1、HandlerInterceptor接口有 3 个拦截方法:

preHandle:Controller逻辑执行之前进行拦截

postHandle:Controller逻辑执行完毕但是视图解析器还未进行解析之前进行拦截

afterCompletion:Controller逻辑和视图解析器执行完毕进行拦截

2、实际开发中 一般preHandle 使用频率比较高,postHandle 和 afterCompletion操作相对比较少。

postHandle 是在视图解析前进行拦截,通过 Model 再次添加数据到 Request域中。

afterCompletion 暂时没有想到使用场景,如果有使用过的场景可以在下面评论区中进行评论。

测试

在浏览器中,输入配置管理器中拦截的地址:http://localhost:8088/th/index

从上图可以看出定义的拦截器生效了,打印出了拦截器里面的log 。

最后

以上,就把Spring Boot 如何使用拦截器介绍完了,是不是特别简单。SpringBoot 2 整合拦截器和整合 Filter的操作很像,都是通过一个注册类将其注入到Spring的上下文中,只不过Filter使用的是 FilterRegistrationBean 而拦截器使用的是 InterceptorRegistry。

个人觉得比使用 xml 配置的方式更为简单,如果你还没有在 SpringBoot 项目中使用过拦截器,赶快来操作一下吧!

这个系列课程的完整源码,也会提供给大家。大家关注我的微信公众号(架构师精进),回复:springboot源码。获取这个系列课程的完整源码。

推荐阅读:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师精进 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、拦截器配置
  • 二、自定义拦截器
  • 测试
  • 最后
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档