拦截器

1、拦截器的基本概念

  拦截器是 SpringBoot 的一个强大的控件,它可以使得程序在进入控制器之前做一些操作,或在控制器方法完成后、甚至是在视图渲染时进行操作,常用于对控制器方法进行预处理和后处理,如进行登录、权限验证问题的处理。
  拦截器和过滤器的概念相似。过滤器是 Servlet 规范中的一部分,任何 Java Web工程都可以使用。拦截器是 SpringMVC 框架的,只有使用了 SpringMVC 框架的工程才能使用。过滤器在 urlpattern 中配置了/*之后,可以对所有要访问的资源拦截,但是拦截器只会拦截访问控制器的 url。它是 AOP 思想的具体应用。
  SpringMVC 中提供了一个 HandlerInterceptor 接口,所有的拦截请求都是通过该接口来实现的。HandlerInterceptor 接口中定义了三个方法,可以通过这三个方法来对用户的请求进行拦截处理。
 
(1)preHandle 方法:该方法在请求处理之前进行调用,返回值是布尔值 Boolean:
返回为 false: 表示不放行,后续的 Interceptor 和 Controller 都不能执行;
返回值为 true: 表示放行,会继续调用下一个 Interceptor 的 preHandle 方法,或当前请求的 Controller 方法。
(2)postHandle 方法:即在当前请求进行处理之后,也就是 Controller 方法调用之后执行,但是它会在 DispatcherServlet 进行视图返回渲染之前被调用,所以可以在这个方法中对 Controller 处理之后的 ModelAndView 对象进行操作。
(3)afterCompletion 方法:该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的。
 
2、拦截器的应用步骤
  在实际的项目中,用户并不是都可以访问项目中所有的页面或控制器中的方法,一般只有当用户成功登录了之后,才允许访问相关页面。这种验证用户在访问一些页面时,是否已登录的判断,就可以用拦截器来完成。具体实现步骤如下。
(1)设计拦截器类,继承 HandlerInterceptor 接口;
(2)创建一个配置类实现 WebMvcConfigurer 接口,重写 addInterceptors 方法,配置拦截器。
posted @ 2023-04-02 18:40  Linqylin  阅读(70)  评论(0编辑  收藏  举报