一.拦截器-拦截路径
配置拦截除了"/login"登录请求以外的所有请求。下面我们进行演示。首先演示登录。
当前返回值中没有输出任何定义拦截器时preHandle,postHandle和afterCompletion的输出信息,因此可以知道拦截器Interceptor并没有生效,原因是我们将"/login"请求排除了。
二.拦截器-执行流程
当我们打开浏览器来访问部署在web服务器当中的web应用是,我们所定义的过滤器会拦截到这次请求。拦截后会先执行放行前逻辑,再执行放行逻辑。由于我们当前是基于springboot来开发的,所以放行后进入到spring的环境当中。就要访问controller当中的接口方法。Tomcat服务器并不识别controller程序,但是识别servlet程序,因为Tomcat是一个servlet容器,而在spring的环境中,为我们提供了一个非常核心的servlet,我们叫前端控制器,这个servlet叫DispatcherServlet。所以请求会首先进入到DispatcherServlet,由DispatcherServlet将请求转给controller,再去执行对应的接口方法。但是我们现在又定义了拦截器,所以在执行controller的方法之前先要被拦截器拦截住。拦截器拦截到这些请求后先要对这些请求进行处理,在执行controller的方法之前要先进行preHandle方法,如果preHandle的返回值为true,执行放行操作,允许访问controller中的方法。如果false就不允许。controller中的方法执行完后在执行postHandle和afterCompletion方法,然后返回给DispatcherServlet,最终过滤器中执行放行后逻辑,最后给浏览器响应数据。
演示:
我们首先将过滤器的注解放开,让过滤器生效。
拦截器也生效
重启服务,使用查询部门的请求
