springboot|springboot 配置拦截器

本贴最后更新于 1953 天前,其中的信息可能已经事过境迁

javaDEMO

本网站记录了最全的各种 JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, spring 的, Mybatis 的等等各种,助力你从菜鸟到大牛,记得收藏哦~~ https://www.javastudy.cloud

springboot 配置拦截器

在 springboot 中配置拦截器大体上分为以下几步
1.引入相关的依赖
2.新建拦截器
3.配置拦截器 Bean
虽然网上有很多配置方法,但是我更倾向于官方文件的配置方法,在以后的 DEMO 中也会是尽量和官方文档进行贴合
参考文档:https://docs.spring.io/spring/docs/5.2.1.RELEASE/spring-framework-reference/web.html#mvc-config-interceptors

引入依赖

只需要引一个 web 的依赖就可以了

implementation 'org.springframework.boot:spring-boot-starter-web'

新建拦截器

如果不知道如何新建,可以参考 Spring 源码中的 LocaleChangeInterceptor

/** * 测试拦截器,继承的类参考 Spring源码中LocaleChangeInterceptor * 和ThemeChangeInterceptor写法 * @Author https://www.javastudy.cloud * @CreateTime 2019/11/8 **/ public class TestInterceptor extends HandlerInterceptorAdapter { /** * 这个方法在HandlerMapping找到对应的处理对象,但还没有请求这个对象时处理 * 也就是在Controller的方法之前执行 * * @param request * @param response * @param handler 这个参数就是代码着Controller的方法 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("run in pre Handle"); return true; } /** * 在Handler/controller的方法处理完逻辑,渲染视图之前执行 * * @param request * @param response * @param handler * @param modelAndView */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("run in post Handle"); } /** * 在视图渲染完之后执行,常用于资源清理等等 * * @param request * @param response * @param handler * @param ex */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { super.afterCompletion(request, response, handler, ex); } }

配置拦截器 Bean

不知道如何配置的同学可以参考上述给出的 spring 官方文档

/** * @Author https://www.javastudy.cloud * @CreateTime 2019/11/8 **/ @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { /** * 在这里添加自己定义的拦截器 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new TestInterceptor()) // 只拦截test路径 .addPathPatterns("/test/**") // 不拦截pass路径 .excludePathPatterns("/pass/**"); } }

编写测试的 controller

这块就写的很随意了

/** * @Author https://www.javastudy.cloud * @CreateTime 2019/11/8 **/ @RestController public class TestController { @RequestMapping("test/testInterceptor") public String testInterceptor(){ System.out.println("in test method"); return ""; } @RequestMapping("pass/testPass") public String testPass(){ System.out.println("in pass method"); return ""; } }

结果输出

走拦截器的情况
image.png
不走拦截器的情况
image.png

DEMO 总评

拦截器是 Web 中的一大核心概念,我们常常拿拦截器与过滤器进行比较,通过代码可简单总结,拦截器是基于 springMVC 的,拦截器是只对 Controller 方法做修改.等等还有很多特性小伙伴们可以自行总结下,常见用法,如文档中所示,可用于本地化,可用于安全验证等等

DEMO 下载

demospringbootinterceptor.zip

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3194 引用 • 8214 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    945 引用 • 1460 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...