您的位置:首页 > 数据库 > Redis

Spring boot整合redis过程中,自定义的拦截器中无法通过spring注入redisTemplate

2020-03-06 13:42 1591 查看

最近搭了个springboot的框架,想用redis来验证登陆的用户是否过期,想通过自定义的拦截器来验证redis中是否存有用户登录的数据。但是在拦截器中注入的redis服务总是获取的null,就是redis服务没有注入进来。也就无法调用业务逻辑

对于自定义的拦截器实现HandlerInterceptor接口,还有自定义实现了WebMvcConfigurer的配置文件一些理解:
HandlerInterceptor接口主要定义了三个方法:

  1. boolean preHandle (HttpServletRequest request, HttpServletResponse response, Object handle)方法:该方法将在请求处理之前进行调用,只有该方法返回true,才会继续执行后续的Interceptor和Controller,当返回值为true 时就会继续调用下一个Interceptor的preHandle 方法,如果已经是最后一个Interceptor的时候就会是调用当前请求的Controller方法;
  2. void postHandle (HttpServletRequest request, HttpServletResponse response, Object handle, ModelAndView modelAndView)方法:该方法将在请求处理之后,DispatcherServlet进行视图返回渲染之前进行调用,可以在这个方法中对Controller 处理之后的ModelAndView 对象进行操作。
  3. void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handle, Exception ex)方法:该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行,该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行。用于进行资源清理。

    如图的情况就是想在自定义拦截器中使用spring框架注入redisTemplate并进行超时和登录验证
    对于自定义的拦截器来说,要配置拦截器
    实现WebMvcConfigurer接口, 并在registry.addInterceptor方法中注册自定义的拦截器, 并通过addPathPatterns()方法添加拦截的url.

    在拦截器栈里是new了一个拦截器对象,所以这个对象并不是A,所以当打入断点调入这个拦截器的时候,再注入redis服务所以才会空,bean注入只在容器初始化的时候注入。那么我在这个拦截器上面加个注解Component注解可不可以了,是不可以的,Spring boot在扫描的时候虽然能扫描到,但是注入的对象和上面情况一样,不是同一bean
  • 点赞
  • 收藏
  • 分享
  • 文章举报
qq_41578093 发布了5 篇原创文章 · 获赞 0 · 访问量 71 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: