RedisTemplate为null的问题

最近在搭建一个项目,然后项目框架采用的是spring boot,然后登录我就使用新学习的JWT嘛,然后就想着在请求进来的时候使用拦截器先对传进来的token进行校验,然后惊奇的发现,一致报错token无效,我写单元测试token也没有问题,然后就是缓存一直没有查询到当前的令牌。

先来看看我是怎么写的

 @Autowired
private RedisTemplate redisTemplate; /**
* 请求处理
*
* @author zhanglianyong
* @date 2022/9/6
* @param request 请求
* @param response 响应
* @param handler 处理器
* @return 是否允许通过
**/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception { //获取请求头中的令牌
String token = request.getHeader("Authorization");
log.info("Authorization:{}", token);
// 先从缓存中查询看看有没有当前令牌
try {
JwtUtils.verify(token);
// 先查询token在缓存中有没有存在
Object user = redisTemplate.opsForValue().get(token);
if (null != user) {
return true;
}
throw CommonException.fail("缓存中没有查询到当前token");
} catch (SignatureVerificationException e) {
throw JwtException.signatureVerificationException();
} catch (TokenExpiredException e) {
throw JwtException.tokenExpiredException();
} catch (AlgorithmMismatchException e) {
throw JwtException.algorithmMismatchException();
} catch (InvalidClaimException e) {
throw JwtException.invalidClaimException();
} catch (CommonException e) {
throw CommonException.userFail(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
log.info("报错信息:{}", e.getMessage());
throw CommonException.fail("token无效");
}
}

然后这样看似乎是没有什么问题的,但是不断发现报错去debug后,发现redisTemplate是null,相当于这个RedisTemplate没有注入,这里确实我没有写好,如果严谨点的话,要是判断,然后抛出异常也知道是什么原因了,但是我没有,然后我就不断不断的试,在纳闷…

解决方案

我去查了一下,然后是因为拦截器是在Bean实例化就已经执行了,所以就会出现上述这种情况,解决方法也很简单,就是在加载拦截器时我们先实例化这个拦截器,将这个Bean注入进去,我们用一个实例工厂,在添加拦截器时将这个Bean注入进去。

@Bean
public JwtInterceptor getJwtInterceptor() {
return new JwtInterceptor();
} @Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getJwtInterceptor())
.addPathPatterns("/user/**")
.excludePathPatterns("/doc.html")
.excludePathPatterns("/webjars/**")
.excludePathPatterns("/user/login");
}

最后

通过上面这样就可以解决加载不进去的问题了,这时运行的redisTemplate就是已经加载进去的了

RedisTemplate在拦截器前没有注入的问题的更多相关文章

  1. 解决 Springboot中Interceptor拦截器中依赖注入失败

    问题: 在Springboot拦截器Interceptor中使用@Resource依赖注入时,发现运行的时候被注解的对象居然是null,没被注入进去 原配置为: @Configurationpubli ...

  2. SpringMVC利用拦截器防止SQL注入

    引言 随着互联网的发展,人们在享受互联网带来的便捷的服务的时候,也面临着个人的隐私泄漏的问题.小到一个拥有用户系统的小型论坛,大到各个大型的银行机构,互联网安全问题都显得格外重要.而这些网站的背后,则 ...

  3. SpringBoot拦截器中无法注入bean的解决方法

    SpringBoot拦截器中无法注入bean的解决方法 在使用springboot的拦截器时,有时候希望在拦截器中注入bean方便使用 但是如果直接注入会发现无法注入而报空指针异常 解决方法: 在注册 ...

  4. Struts2使用自定义拦截器导致Action注入参数丢失、url参数

    写struts2项目时发现前台超链接中的参数无法传到action, 所有带有传递参数的均无法正常使用了,在Action中所有的参数无法被注入. 后来经过debug发现其中的页面都要先经过拦截器,而后再 ...

  5. 【SpringBoot】拦截器使用@Autowired注入接口为null解决方法

    最近使用SpringBoot的自定义拦截器,在拦截器中注入了一个DAO,准备下面作相应操作,拦截器代码: public class TokenInterceptor implements Handle ...

  6. Spring MVC通过拦截器处理sql注入、跨站XSS攻击风险

    sql注入就是通过url或者post提交数据时候,字符串类型的参数会被别人利用传入sql语句,最终破坏数据库或者达到一些见不得人的目的. 有时候因为业务需要url中会带一些参数,比如 ?type=xx ...

  7. SpringBoot拦截器中Bean无法注入(转)

    问题 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Be ...

  8. [Abp vNext 源码分析] - 3. 依赖注入与拦截器

    一.简要说明 ABP vNext 框架在使用依赖注入服务的时候,是直接使用的微软提供的 Microsoft.Extensions.DependencyInjection 包.这里与原来的 ABP 框架 ...

  9. 【tmos】如何在Interceptor拦截器中注入其他数据

    光是这样是获取不到weixinConfig内容的 public class WebLoginInterceptor implements HandlerInterceptor { @Autowired ...

  10. springboot拦截器注入service为空

    一般都是因为除了在拦截器之外,还需要在拦截器的配置类中,注册拦截器时没有使用spring的bean,而是使用了new创建bean造成的. @Configuration public class Web ...

随机推荐

  1. JUC学习!

    JUC 1.what? JUC就是java.util.concurrent下面的类包,专门用于多线程的开发. 2.why? 解决多线程.高并发 3.how?  ||  || ﹀ point1:vola ...

  2. 深入理解css 笔记(8)

      接下来我们讲下响应式设计,最初开发人员通过创建两个网站来解决这个问题.桌面版和移动版,只是假如要兼容越来越多的设备,比如大屏的平板手机,ipad mini.这时候,强制分开的方案带来就比较多的麻烦 ...

  3. 复制文本到粘贴板 (vue3)(兼容ios)

    // 点击复制到剪贴板 const copyToClipboard = (content)=> { if (window.clipboardData) { window.clipboardDat ...

  4. github fork 别人的项目源作者更新后如何同步更新

    如下 左边选择我们拷贝的库  右边选择原工程 如下 点击箭头指向的位置 然后选择右边原工程目录

  5. 制作可以显示GIF动图的activeX 控件

    因为工作需要,我需要一个可以显示gif 动图的控件,用来在VBS中显示动图,结果找了半天发现根本没有这样的控件,所以只能搜集资料自己来制作一个. 下面记录一下步骤: 1. 下载 PictureEx.h ...

  6. Python学习笔记--判断语句的延续

    if else语句 示例: 需要注意的是,if后面必须有条件,而else后面可以不需要判断条件 案例: 实现: if elif else 语句 多条件判断,if 和 elif 后面必须有条件,else ...

  7. SpringBoot使用邮件发送

    使用场景: 定时任务报错 消息推送 日志报错提醒 1.导入依赖 <dependency> <groupId>org.springframework.boot</group ...

  8. InstructPix2Pix: 动动嘴皮子,超越PS

    摘要:InstructPix2Pix提出了一种使用文本编辑图像的方法:给定输入图像和编辑指令,告诉模型要做什么,模型将遵循这些指令来编辑图像. 本文分享自华为云社区<InstructPix2Pi ...

  9. GUI编程 --2

    GUI编程 --2 2.4 事件监听 按钮的使用. package com.ssl.lesson02; import java.awt.*; import java.awt.event.ActionE ...

  10. 基于深度学习的智能PCB板缺陷检测系统(Python+清新界面+数据集)

    摘要:智能PCB板缺陷检测系统用于智能检测工业印刷电路板(PCB)常见缺陷,自动化标注.记录和保存缺陷位置和类型,以辅助电路板的质检.本文详细介绍智能PCB板缺陷检测系统,在介绍算法原理的同时,给出P ...