登录拦截器无法注入StringRedisTemplate更新过期的token

问题引出:

        在写登录拦截器的时候,我们需要通过token解析出token的过期时间,开始时间等信息判断token是否过期。如果token过期了,我们就需要更新token的缓存。由于我项目中使用的redis,很正常地使用了@Autowired注解自动注入StringRedisTemplate,但在使用过程中频繁报出空异常。在给拦截器加入@Component等注解让拦截器交由spring管理后,发现StringRedisTemplate仍然无法注入。后面debug详细看了一下执行过程,发现StringRedisTemplate都是无法注入的!但在其他包下redis却是可以注入的。

问题所在:

        我们知道,Java的组件类一般是通过注解将这个类交由spring管理,如果无法注入,那么就是这个类还未注入到spring中。我们按照了以往正常步骤注入一个组件类仍然无法注入时。那么可能就是执行顺序的问题。查阅了资料后发现拦截器是在springcontext之前就创建的,StringRedisTemplate还未被加载出来,所以注入直接为空。核心问题所在就是拦截器执行在自动bean初始化之前导致的。

问题解决:

        在WebMvcConfigurer中将拦截器注入到spring中,此时我们的拦截器就会在springcontext之后创建,并可以成功注入

    

猜你喜欢

转载自blog.csdn.net/Leungiyee/article/details/129614437