赞
踩
在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/**");
- }
- }

这块就写的很随意了
- /**
- * @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 "";
- }
- }

走拦截器的情况
不走拦截器的情况
拦截器是Web中的一大核心概念,我们常常拿拦截器与过滤器进行比较,通过代码可简单总结,拦截器是基于springMVC的,拦截器是只对Controller方法做修改.等等还有很多特性小伙伴们可以自行总结下,常见用法,如文档中所示,可用于本地化,可用于安全验证等等
可添加小刀微信获取源码
往期热文
springboot|springboot配置定时任务及常用的cron表达式
点在看的都没有bug!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。