首页 > 其他分享 >springboot Filter @Resource 为空 、@Value 无法读取yml配置的问题

springboot Filter @Resource 为空 、@Value 无法读取yml配置的问题

时间:2023-10-30 09:33:34浏览次数:26  
标签:Resource springboot PREFIX Value Environment token USER redisUtil CommonConstant

问题1 :在过滤器中使用 @Resource 为null

Spring中,web应用启动的顺序是:listener->filter->servlet,先初始化listener,然后再来就filter的初始化,再接着才到我们的dispathServlet的初始化,因此,当我们需要在filter里注入一个注解的bean时,就会注入失败,因为filter初始化时,注解的bean还没初始化,没法注入。

简答理解:过滤器的生命优先级比较高,还没加载后面的bean之类的东西,spring无法帮你注入

解决方法:

ServletContext context = request.getServletContext();
   ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
   RedisUtil redisUtil = ctx.getBean(RedisUtil.class);
   Environment environment = ctx.getBean(Environment.class);
   String oauthOpen = environment.getProperty("oauth.open");
   if("true".equals(oauthOpen)){
       long expireTime = redisUtil.getExpire(CommonConstant.PREFIX_USER_TOKEN + token);
       //如果即将过期时间小于设定过期时间的十分之一(3分钟),就重新再赋值过期时间
       if(expireTime <= JwtUtil.EXPIRE_TIME/1000/10 && expireTime>0){
           LoginUser loginAuthUser = (LoginUser) redisUtil.get(CommonConstant.PREFIX_AUTH_USER + token);
           redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
           redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME/1000 );
           redisUtil.set(CommonConstant.PREFIX_AUTH_USER + token, loginAuthUser);
           redisUtil.expire(CommonConstant.PREFIX_AUTH_USER + token, JwtUtil.EXPIRE_TIME/1000);
       }
   }

问题2:过滤器使用 @Value 为null

Environment 用来表示整个应用运行时的环境,为了更形象地理解Environment,你可以把Spring应用的运行时简单地想象成两个部分:一个是Spring应用本身,一个是Spring应用所处的环境。

如此一来可以简单试试看,利用上面的方法获取bean,然后读取yml文件:

Environment environment = ctx.getBean(Environment.class);
String oauthOpen = environment.getProperty("oauth.open");

 

标签:Resource,springboot,PREFIX,Value,Environment,token,USER,redisUtil,CommonConstant
From: https://www.cnblogs.com/besehen/p/17797071.html

相关文章

  • 编写一个自己的SpringBoot Starter
    我们用SpringBoot的时候发现有很多starter,比如spring-boot-starter-web等,对于SpringBoot的官方starter,基本上是以spring-boot-starter-xxx来命名的,对于非官方的一些包来说,我们该怎样将自己的包与SpringBoot结合起来呢?在SpringBoot的官方文档中,有这样一章,CreatingYourOwnStarter......
  • Springboot整合XXL-job
    1、开发步骤:pom.xml<!--xxl-job--><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.3.1</version></dep......
  • Springboot拦截器的使用
    1.拦截器(Interceptor)在SpringBoot中,拦截器是基于SpringMVC框架的一部分,主要用于对控制器方法进行拦截处理。拦截器是通过实现HandlerInterceptor接口来定义的其中包括三个主要方法:preHandle、postHandle和afterCompletion。1.preHandle方法在进入控制器方法之前执行2.postHan......
  • Marine pollution resources
    MarinePollutionTheworld’smarinepollutioncomesinmanyforms–fromtoxicchemicals,sewageandfertiliserstoplastics,discardedfishingnetsandeventhenoisefromshippinganddrilling.Over80%ofitoriginatesfromland-basedactivities(WWF,......
  • SpringBoot简介&IDEA在线创建一个SpringBoot项目
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言SpringBoot项目创建有三种方式,分别是在线创建、使用Springinitializr快速创建、和改造Maven工程创建,本期讲的就是如何在线创建一个SpringBoot项......
  • Could not resolve placeholder '' in value "${}"
    Couldnotresolveplaceholder''invalue"${}"背景用Jenkins构建maven自动化打包时,因为需要从properties文件读取参数来区分是本地Debug版还是正式上线版,配置完就不能用了。FailedtoloadApplicationContext原因两个错误都出现,因为本来是用IDEA的默认配置的resources文......
  • 基于SpringBoot框架的教学评价系统-计算机毕业设计源码+LW文档
    摘要随着时代的发展,我国的教育水平在不断的提高,但是很多时候为了更好的提高教学的质量,会让学生对当前的教学进行评价,教育工作者根据学生的评价发现当下教学中的一些不足,从而更好的提高教学质量,为了让教学评价变的更加的方便我们开发了本次的教学评价系统。本系统从用户的角度出......
  • SpringBoot 公司推广系统 公司广告系统
    SpringBoot公司推广系统公司广告系统系统功能首页功能:广告展示方案列表站内搜索资讯查看详细咨询登录注册收藏咨询方案在线客服实时聊天后台管理功能:系统管理分为:用户管理角色管理客户管理首页轮播管理公告管理方案管理:方案管理资讯管理:类型管理资讯......
  • 收藏从未停止,练习从未开始——MYSQL游标存储过程IDEA快捷键配置SpringBoot入门到入土G
    “收藏从未停止,练习从未开始”,或许有那么一些好题好方法,在被你选中收藏后却遗忘在收藏夹里积起了灰?今天请务必打开你沉甸甸的收藏重新回顾,分享一下那些曾让你拍案叫绝的好东西吧!本人详解:(提醒:随笔)本人详解作者:王文峰,参加过2020年度博客之星,《Java王大师王天师》作者采购供应链共享......
  • 【SpringBoot】Docker部署
    docker部署是主流的部署方式,极大的方便了开发部署环境,保持了环境的统一,也是实现自动化部署的前提。1项目的目录结构package:点击打包,生成xxx-SNAPSHOT.jartarget目录:打包生成目录,生成的jar存放位置Dockerfile:跟项目根目录同级2创建Dockerfile#Docker镜像构......