SpringBoot拦截器Interceptor讲解

1.拦截器介绍

1.1拦截器是什么

  • 拦截器是一种动态拦截方法调用的机制,相当于过滤器;
  • 拦截器是Spring框架中提供的,用来动态拦截控制器方法的执行。

1.2拦截器作用

  • 拦截请求,在指定方法调用前后,根据业务需求编写处理逻辑。

在拦截器当中,通常做一些通用性的操作,比如:我们可以通过拦截器来拦截前端发起的请求,将登录校验的逻辑全部编写在拦截器当中。在校验的过程当中,如发现用户登录了(携带JWT令牌或者Token且检验合法),就可以直接放行,去访问spring当中我们编写的方法。如果校验时发现并没有登录或是非法令牌,就可以直接给前端响应未登录的错误信息。

2.拦截器使用

以下是拦截器的具体使用过程:

2.1定义拦截器

自定义拦截器:实现HandlerInterceptor接口,并重写其所有方法

@Component
public class CommonInterceptor implements HandlerInterceptor {

    //目标资源方法执行前执行。 返回true:放行    返回false:不放行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
           System.out.println("preHandle方法执行.... ");
            // 在此处编写我们的拦截逻辑
            return true;  
    }

    //目标资源方法执行后执行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle方法执行... ");
    }

     //视图渲染完毕后执行,最后执行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion方法执行.... ");
    }
}

 注意:preHandle方法:目标资源方法执行前执行。 返回true:放行 返回false:不放行

           postHandle方法:目标资源方法执行后执行

           afterCompletion方法:视图渲染完毕后执行,最后执行

 2.2注册配置拦截器

 注册配置拦截器:实现WebMvcConfigurer接口,并重写addInterceptors方法

@Configuration
public class WebMvcConfiguration  extends WebMvcConfigurationSupport {

    //注入自定义的拦截器对象
    @Autowired
    private CommonInterceptor commonInterceptor;

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        System.out.println("开始注册自定义拦截器...");
        registry.addInterceptor(commonInterceptor) //添加拦截器
                .addPathPatterns("/**") //设置拦截器拦截的请求路径( /** 表示拦截所有请求)
                .excludePathPatterns("/login") //不需要拦截的路径
        ;
    }
}

 在拦截器中除了可以设置/**拦截所有资源外,还有一些常见拦截路径设置:

拦截路径

含义

举例

/*

一级路径

能匹配/demo,/login,不能匹配 /demo/1

/**

任意路径

能匹配/demo,/demo/1,/demo/1/2

/demo/*

/demo下的一级路径

能匹配/demo/1,不能匹配/demo/1/2,/demo

/demo/**

/demo下的任意级路径

能匹配/demo,/demo/1,/demo/1/2,不能匹配/emps/1

 3.拦截器执行流程

 

 

  • 当我们打开浏览器来访问web应用时,此时过滤器会拦截到这次请求。拦截到这次请求之后,它会先执行放行前的逻辑,然后再执行放行操作。如果是基于springboot开发的,那么放行之后是进入到spring的环境当中,也就是访问我们所定义的controller当中的接口方法。

  • Tomcat并不识别所编写的Controller程序,但是它识别Servlet程序,所以在Spring的Web环境中提供了一个非常核心的Servlet:DispatcherServlet(前端控制器),所有请求都会先进行到DispatcherServlet,再将请求转给Controller。

  • 当我们定义了拦截器后,会在执行Controller的方法之前,请求被拦截器拦截住。执行preHandle()方法,如果返回true,就表示放行本次操作,才会继续访问controller中的方法;如果返回false,则不会放行(controller中的方法也不会执行)。

  • 在controller当中的方法执行完毕之后,再回过来执行postHandle()这个方法以及afterCompletion() 方法,然后再返回给DispatcherServlet,最终再来执行过滤器当中放行后的这一部分逻辑的逻辑。执行完毕之后,最终给浏览器响应数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值