SpringBoot从小白到精通(十)使用Interceptor拦截器,一学就会!-阿里云开发者社区

开发者社区> 章为忠学架构> 正文

SpringBoot从小白到精通(十)使用Interceptor拦截器,一学就会!

简介: 使用Spring Boot开发web项目有个非常重要的组件:拦截器。以前我们在做mvc 项目时也使用到的是filter过滤器也就是拦截器。其实Spring Boot 中的拦截器和SpringMVC中的拦截器也是类似的,只是配置上有些区别。那么下面我们就来看看Spring Boot 是怎么配置拦截器的。
+关注继续查看

使用Spring Boot开发web项目有个非常重要的组件:拦截器。以前我们在做mvc 项目时也使用到的是filter过滤器也就是拦截器。其实Spring Boot 中的拦截器和SpringMVC中的拦截器也是类似的,只是配置上有些区别。那么下面我们就来看看Spring Boot 是怎么配置拦截器的。

 

一、拦截器配置

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

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;
@Configuration
public 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 接口,达到请求拦截的作用。具体代码如下:

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

image.png

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

 

最后

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

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

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



推荐阅读:

SpringBoot从小白到精通(九)使用@Async实现异步执行任务

SpringBoot从小白到精通(八)熟悉@EnableScheduling,一秒搞定定时任务

SpringBoot从小白到精通(七)使用Redis实现高速缓存架构

SpringBoot从小白到精通(六)使用Mybatis实现增删改查【附详细步骤】

SpringBoot从小白到精通(五)Thymeleaf的语法及常用标签

SpringBoot从小白到精通(四)Thymeleaf页面模板引擎

SpringBoot从小白到精通(三)系统配置及自定义配置

SpringBoot从小白到精通(二)如何返回统一的数据格式

SpringBoot从小白到精通(一)如何快速创建SpringBoot项目

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用IntelliJ IDEA开发SpringMVC网站(二)框架配置
原文:使用IntelliJ IDEA开发SpringMVC网站(二)框架配置 摘要 讲解如何配置SpringMVC框架xml,以及如何在Tomcat中运行 目录[-] 文章已针对IDEA 15做了一定的更新,部分更新较为重要,请重新阅读文章并下载最新源码。
959 0
【spring 注解 错误】使用controller 作为后台给前台ajax交互数据出错
controller作为后台与前台的ajax进行交互,后台的方法处理完成返回一个boolean类型的值,想传给前台用来判断是否执行成功,BUT,问题来了: 1 严重: Servlet.service() for servlet rest threw exception 2 java.
695 0
使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理
原文:使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理 摘要 通过对博客文章的管理,实现外键操作。 目录[-] 八、博客文章管理 1、查看文章 2、添加博客        3、查看博文详情 4、修改博客内容 5、删除博客文章 九、尾声         1、如何部署 2、进一步的学习 3、ENDING 转载请注明出处:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 。
1054 0
IntelliJ IDEA 13.x 下使用Hibernate + Spring MVC + JBoss 7.1.1
原文:IntelliJ IDEA 13.x 下使用Hibernate + Spring MVC + JBoss 7.1.1 从2004年开始做.NET到现在。直到最近要做一些JAVA的项目,如果说100个人写一篇关于.NET的文章,估计这10个人写的内容都是一样。
902 0
+关注
章为忠学架构
获取源码、资料,请关注我的微信公众号(架构师精进)
67
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载