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. 编写简单的button配合input实现上传文件操作

    <template> <button> 导入文件 <input type="file" @change="fileChange" ...

  2. Nginx自带的变量

    $args #请求中的参数值$query_string #同 $args$arg_NAME #GET请求中NAME的值$is_args #如果请求中有参数,值为"?",否则为空字符 ...

  3. jenkins脚本

    1.统计代码 pipeline { agent any parameters { choice( description: '你需要选择当前哪个分支进行统计 ?', name: 'branchNow' ...

  4. 微信小程序中如何设置跳转页面

    修改project.config.json内容 "cloudfunctionRoot":"cloud", //配置云开发的路径 更改app.js文件内容 App ...

  5. Linux邮件mail.rc配置,发件服务配置

    Linux邮件mail.rc配置 前提条件 邮箱需要开启smtp功能 关闭selinux和防火墙 1.  安装mailx yum install -y mailx 2.  配置/etc/mail.rc ...

  6. 对于实现上一篇遇到的问题——MyBatis+增删改查(已解决)

    问题一:该Http不支持Get/Post方法 我根据网上的解决方法将Get和Post的位置来回换,还是不停报错: 后来偶然间看到一个博主发的"你的代码写在Get或者Post里面,就将没写代码 ...

  7. 如何高效实现 MySQL 与 elasticsearch 的数据同步

    MySQL 自身简单.高效.可靠,是又拍云内部使用最广泛的数据库.但是当数据量达到一定程度的时候,对整个 MySQL 的操作会变得非常迟缓.而公司内部 robin/logs 表的数据量已经达到 800 ...

  8. 《golong入门教程📚》,从零开始入门❤️(建议收藏⭐️)

    Go语言学习笔记 本菜鸟的Go语言学习笔记,历时1个月,包含了Go语言大部分的基本语法(不敢说全部),学习期间参考了各种视频,阅读了各种文章,主要参考名单如下: 点击跳转到参考名单<( ̄︶ ̄)& ...

  9. Windows系统下Dos命令记录

    # 切换到F:\test\目录 /d 参数可以直接切换,不需要先切换盘符 cd /d F:\test\ # 创建文件夹test md tset # 删除文件夹test rd test # 创建文件te ...

  10. windows下使用pytorch进行单机多卡分布式训练

    现在有四张卡,但是部署在windows10系统上,想尝试下在windows上使用单机多卡进行分布式训练,网上找了一圈硬是没找到相关的文章.以下是踩坑过程. 首先,pytorch的版本必须是大于1.7, ...