当前位置:   article > 正文

Spring Boot 拦截器_springboot websocket 拦截器

springboot websocket 拦截器

Spring Boot 拦截器介绍

Spring Boot 拦截器是 AOP 的一种实现,专门拦截对控制层的请求,主要应用于判断用户权限,拦截webSocket请求。SpringBoot中的拦截器实现和spring mvc 中是一样的,它的大致流程是,先自己定义一个拦截器类,并将这个类实现一个HandlerInterceptor类,或者是继承HandlerInterceptorAdapter,都可以实现拦截器的定义。然后将自己定义的拦截器注入到适配器中,也有两种方式,一种是实现WebMvcConfigurer接口,一种是继承WebMvcConfigurerAdapter
在这里插入图片描述
在这里插入图片描述

在 Spring Boot 项目中,使用拦截器功能通常需要以下 2 步:

  1. 创建拦截器;
  2. 配置拦截器,指定拦截规则(如果是拦截所有,静态资源也会被拦截)

创建拦截器

直接上代码,再进行一些代码讲解。

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("进入拦截器了");
        //中间写逻辑代码,比如判断是否登录成功,失败则返回false
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        //
        System.out.println("controller 执行完了");
    }


    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        System.out.println("我获取到了一个返回的结果:"+response);
        System.out.println("请求结束了");
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

方法说明

方法声明返回值类型方法描述
preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)boolean改方法在控制器处理请求方法前执行,其返回值表示是否中断后续操作,返回true表示继续向下执行,返回false表示中断后续操作。
postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView)viod该方法在控制器处理请求方法调用之后,解析视图之前,可以通过此方法对请求域中的模型和视图做进一步修改
afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex)void该方法在视图渲染结束后执行,可以通过此方法实现资源清理,记录日志等工作

拦截器注入适配器

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor())
                .addPathPatterns("/**")//拦截所有的路径
                .excludePathPatterns("/LoginController/login");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

代码说明:

  • 通过实现WebMvcConfigurer接口可以自定义一个适配器,也可以通过继承WebMvcConfigurerAdapter来定义适配器,建议使用第一种,第二种已经是过时的方法了。
  • 重写addInterceptors方法,addInterceptor方法是将拦截器注入到适配器中。
  • addPathPatterns方法是设置一个需要拦截的路径,可以是多个字符串或者是直接传入一个数组。
  • excludePathPatterns是配置不需要拦截的路径。
  • 需要加上configuration注解说明这是一个配置类,在项目启动的时候自动执行。

Object handler 参数

输出一下handler

System.out.println(handler);
  • 1

在这里插入图片描述
handler是 被调用的处理器对象,本质上是一个方法对象,对反射技术中的Method对象进行了再包装

		HandlerMethod hm = (HandlerMethod)handler;
        //通过hm.getMethod()就可以拿到原始执行的对象,拿到这个对象就可以进行反射
        System.out.println(hm.getMethod().getName());
  • 1
  • 2
  • 3

多拦截器执行顺序

当配置多个拦截器时,形成拦截器链,拦截器链的运行顺序参照拦截器添加顺序为准,下面就是三个拦截器时的执行顺序。
在这里插入图片描述
拦截器链的运行顺序
preHandle:与配置顺序相同。必定运行
postHnadle:与配置顺序相反,可能不运行
afterCompletion:与配置顺序相反,可能不运行

拦截器与过滤器的区别

归属不同Filter属于Servlet技术,Interceptor属于SpringMVC技术
拦截器内容不同Filter对所有访问进行增强(在Tomcat服务器进行配置),Interceptor仅针对SpringMVC的访问进行增强

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/457930
推荐阅读
相关标签
  

闽ICP备14008679号