Fork me on GitHub

SpringBoot+Mybatis+PostMan(四):学习拦截器

Springboot+Mybatis+redis+postman项目实战总目录*

SpringBoot+Mybatis+PostMan(五):token登陆认证过程一(token生成与认证)

SpringBoot+Mybatis+PostMan(五):token登陆认证过程二(redis缓存引入)

SpringBoot+Mybatis+PostMan(六):token登陆认证过程三(redis封装与干掉原来session,避免用户重复登陆)

番外篇:SpringBoot 用户注册时经MD5加密存入数据库

 

第二篇章:用户角色权限访问控制

SpringBoot+Mybatis+PostMan(七):用户角色权限访问控制入门(数据模拟实现,不带数据库)

SpringBoot+Mybatis+PostMan(八):用户角色权限访问控制一(数据库用户角色表查询组合)

SpringBoot+Mybatis+PostMan(九):用户角色权限访问控制二(加入资源表和资源角色对应表)

SpringBoot+Mybatis+PostMan(十):用户角色权限访问控制三(禁用session、启用token并集成redis)

 

项目代码获取地址:https://github.com/yeyuting-1314/testdemo_DM5_insert_page_token.git

 

上一篇我们对过滤器的定义和实现做了详细的介绍,这篇博文来介绍和过滤器有着异曲同工之妙的拦截器,两者功能实现上十分的相似,但是在一部分内容上还是存在一定的区别。

相对于过滤器,但是提供更精细的的控制能力:在request被响应之前、request被响应之后、视图渲染之前以及request全部结束之后。我们不能通过拦截器修改request内容,但是可以通过抛出异常(或者返回false)来暂停request的执行。二者区别总结如下:

  Filter是依赖于Servlet容器,属于Servlet规范的一部分,而拦截器则是独立存在的,可以在任何情况下使用。

  Filter的执行由Servlet容器回调完成,而拦截器通常通过动态代理的方式来执行。

  Filter的生命周期由Servlet容器管理,而拦截器则可以通过IoC容器来管理,因此可以通过注入等方式来获取其他Bean的实例,因此使用会更方便。

现在来实现拦截器。

1. 实现特定拦截器(我们这里实现的拦截器和上一篇过滤器实现一样的功能)

//拦截器实现 完成和过滤器一样的功能 需要实现HandlerInterceptor这个接口
public class LogCostInterceptor implements HandlerInterceptor {
    long start = System.currentTimeMillis() ;

    //preHandle是请求执行前执行的
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest , HttpServletResponse httpServletResponse ,
                             Object o) throws Exception{
        start = System.currentTimeMillis() ;
        return true ;
    }

    //postHandler是请求结束执行的,但只有preHandle方法返回true的时候才会执行
    @Override
    public void postHandle(HttpServletRequest httpServletRequest ,
                              HttpServletResponse httpServletResponse ,
                              Object o , ModelAndView modelAndView)throws Exception{
        System.out.println("Interceptor cost1 = "  + (System.currentTimeMillis()-start));
    }

    //afterCompletion是视图渲染完成后才执行,同样需要preHandle返回true,该方法通常用于清理资源等工作
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest ,
                                HttpServletResponse httpServletResponse ,
                                Object o , Exception e)throws Exception{

    }

}

2. 拦截器配置:

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LogCostInterceptor()).addPathPatterns("/**") ;
        WebMvcConfigurer.super.addInterceptors(registry);
    }
}

这样以来,拦截器就初步配置完毕,在前端访问某一网页,实现拦截器访问前后时间差计算。

 

 

 

 这样一来,拦截器也顺利实现。

至此,结束。

posted @ 2021-01-13 11:57  叶语婷  阅读(437)  评论(0编辑  收藏  举报