SpringBoot(11) SpringBoot自定义拦截器
自定义拦截器共两步:第一:注册。第二:定义拦截器。
一、注册 @Configuration
继承WebMvcConfigurationAdapter(SpringBoot2.X之前旧版本)
旧版本代码
@Configuration
public class CustomOldWebMvcConfigurer extends WebMvcConfigurerAdapter { @Override
public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginIntercepter()).addPathPatterns("/api/"); super.addInterceptors(registry);
} }
SpringBoot2.X 新版本配置拦截器 implements WebMvcConfigurer
新版本代码
@Configuration
public class CustomWebMvcConfigurer implements WebMvcConfigurer { @Override
public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginIntercepter()).addPathPatterns("/api2/*/**").excludePathPatterns("/api2/xxx/**");;
registry.addInterceptor(new TwoIntercepter()).addPathPatterns("/api2/*/**");
WebMvcConfigurer.super.addInterceptors(registry);
} }
二、定义拦截器 HandlerInterceptor
1、LoginIntercepter
 public class LoginIntercepter implements HandlerInterceptor{
     /**
      * 进入controller方法之前
      */
     @Override
     public boolean preHandle(HttpServletRequest request,
             HttpServletResponse response, Object handler) throws Exception {
         System.out.println("LoginIntercepter------->preHandle");
 //        String token = request.getParameter("access_token");
 //
 //        response.getWriter().print("fail");
 //        return true;
         return HandlerInterceptor.super.preHandle(request, response, handler);
     }
     /**
      * 调用完controller之后,视图渲染之前
      */
     @Override
     public void postHandle(HttpServletRequest request,
             HttpServletResponse response, Object handler,
             ModelAndView modelAndView) throws Exception {
         System.out.println("LoginIntercepter------->postHandle");
         HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
     }
     /**
      * 整个完成之后,通常用于资源清理
      */
     @Override
     public void afterCompletion(HttpServletRequest request,
             HttpServletResponse response, Object handler, Exception ex)
             throws Exception {
         System.out.println("LoginIntercepter------->afterCompletion");
         HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
     }
 }
2、TwoIntercepter
 public class TwoIntercepter implements HandlerInterceptor{
     /**
      * 进入对应的controller方法之前
      */
     @Override
     public boolean preHandle(HttpServletRequest request,
             HttpServletResponse response, Object handler) throws Exception {
         System.out.println("TwoIntercepter------>preHandle");
         //return true;
         return HandlerInterceptor.super.preHandle(request, response, handler);
     }
     /**
      * controller处理之后,返回对应的视图之前
      */
     @Override
     public void postHandle(HttpServletRequest request,
             HttpServletResponse response, Object handler,
             ModelAndView modelAndView) throws Exception {
         System.out.println("TwoIntercepter------>postHandle");
         HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
     }
     /**
      * 整个请求结束后调用,视图渲染后,主要用于资源的清理
      */
     @Override
     public void afterCompletion(HttpServletRequest request,
             HttpServletResponse response, Object handler, Exception ex)
             throws Exception {
         System.out.println("TwoIntercepter------>afterCompletion");
         HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
     }
 }
注:
1. 三个重载方法说明
preHandle:调用Controller某个方法之前
postHandle:Controller之后调用,视图渲染之前,如果控制器Controller出现了异常,则不会执行此方法
afterCompletion:不管有没有异常,这个afterCompletion都会被调用,用于资源清理
2.顺序
按照注册顺序进行拦截,先注册,先被拦截

三、拦截器不生效常见问题:
1)是否有加@Configuration
		2)拦截路径是否有问题 **  和 * 
		3)拦截器最后路径一定要 “/**”, 如果是目录的话则是 /*/
四、过滤器与拦截器的区别
Filter是基于函数回调 doFilter(),而Interceptor则是基于AOP思想
Filter在只在Servlet前后起作用,而Interceptor够深入到方法前后、异常抛出前后等
依赖于Servlet容器即web应用中,而Interceptor不依赖于Servlet容器所以可以运行在多种环境。
在接口调用的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。
Filter和Interceptor的执行顺序:过滤前->拦截前->action执行->拦截后->过滤后
SpringBoot(11) SpringBoot自定义拦截器的更多相关文章
- springboot 2.0+ 自定义拦截器
		
之前项目的springboot自定义拦截器使用的是继承WebMvcConfigurerAdapter重写常用方法的方式来实现的. 以下WebMvcConfigurerAdapter 比较常用的重写接口 ...
 - SpringBoot 2.x 自定义拦截器并解决静态资源访问被拦截问题
		
自定义拦截器 /** * UserSecurityInterceptor * Created with IntelliJ IDEA. * Author: yangyongkang * Date: ...
 - SpringBoot中设置自定义拦截器
		
SpringBoot中设置自动以拦截器需要写一个类继承HandlerInterceptorAdapter并重写preHandle方法 例子 public class AuthorityIntercep ...
 - SpringBoot自定义拦截器实现IP白名单功能
		
SpringBoot自定义拦截器实现IP白名单功能 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/8993331.html 首先,相关功能已经上线了,且先让我先 ...
 - SpringMVC拦截器与SpringBoot自定义拦截器
		
首先我们先回顾一下传统拦截器的写法: 第一步创建一个类实现HandlerInterceptor接口,重写接口的方法. 第二步在XML中进行如下配置,就可以实现自定义拦截器了 SpringBoot实现自 ...
 - SpringBoot学习笔记:自定义拦截器
		
SpringBoot学习笔记:自定义拦截器 快速开始 拦截器类似于过滤器,但是拦截器提供更精细的的控制能力,它可以在一个请求过程中的两个节点进行拦截: 在请求发送到Controller之前 在响应发送 ...
 - SpringBoot自定义拦截器实现
		
1.编写拦截器实现类,此类必须实现接口 HandlerInterceptor,然后重写里面需要的三个比较常用的方法,实现自己的业务逻辑代码 如:OneInterceptor package com ...
 - 【学习】SpringBoot之自定义拦截器
		
/** * 自定义拦截器 **/ @Configuration//声明这是一个拦截器 public class MyInterceptor extends WebMvcConfigurerAdapte ...
 - SpringBoot之自定义拦截器
		
一.自定义拦截器实现步骤 1.创建拦截器类并实现HandlerInterceptor接口 2.创建SpringMVC自定义配置类,实现WebMvcConfigurer接口中addInterceptor ...
 
随机推荐
- 【repost】Python正则表达式
			
星光海豚 python正则表达式详解 正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技 ...
 - 手把手教你利用Python自动下载CL社区图片
			
需求描述: 最近发现CL社区上好多精华的帖子分享的图片非常棒,好想好想保存下来,但是一张一张地保存太费时间了,因此,造物者思想主义的我就想动手写个工具,实现只要输入帖子的链接,就能把所有的精华 ...
 - java holdsLock()方法检测一个线程是否拥有锁
			
http://blog.csdn.net/w410589502/article/details/54949506 java.lang.Thread中有一个方法叫holdsLock(),它返回true如 ...
 - MFC中的一些视图
			
本章主要介绍MFC中主要的视图类,这些继承自Cview类. 继承关系如上图所示. 滚动视图 CscrollView给Cview添加了基本的滚动功能,它包含WM_VSCROLL和WM_HSCROLL消息 ...
 - spring 框架学习网站
			
spring 框架学习网站 NO1 http://www.mkyong.com NO2 https://spring.io/docs/reference
 - js前段开发工具
			
http://runjs.cn/?token=e87dac453af5caed08d1771682b0c3f5
 - 网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?
			
1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步 ...
 - 使用Java类加载SpringBoot、SpringCloud配置文件
			
我们都知道平常在使用SpringBoot和SpringCloud的时候,如果需要加载一两个配置文件的话我们通常使用@Value("${属性名称}")注解去加载.但是如果配置文件属性 ...
 - LSTM和GRU
			
LSTM和GRU LSTM 忽略偏置: \[\begin{align} i_t&=\sigma(x_t\cdot W_i+h_{t-1}\cdot U_i)\\ f_t&=\sigma ...
 - 博客Hexo + github pages + 阿里云绑定域名搭建个人博客
			
申请域名 万网购买的域名,地址:https://wanwang.aliyun.com/domain/com?spm=5176.8142029.388261.137.LoKzy7 控制台进行解析 控制台 ...