@Value()读取配置文件属性,读出值为null的问题

一、问题描述

自定义一个Filter如下:

@Component
public class JwtFilter extends GenericFilterBean{

    @Value("${jwt.header}")
    private String header;  //此处无法注入 值为 null
在config中将此filter注册给spring

@Configuration
@AutoConfigureAfter(JwtFilter.class)
public class JwtConfig {
    @Bean
    public FilterRegistrationBean jwtFilter() {
        final FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new JwtFilter());  //率先执行
        String[] paths = jwtProperty.getCheckPath().split(",");
        for (String p : paths){
            registrationBean.addUrlPatterns(p);
            System.out.println(p);
        }
        return registrationBean;
    }
}

原因:执行顺序问题,config率先执行,new JwtFilter()会构造一个filter对象交给spring,而此时 @Value还未读取配置,所以在JwtFilter中的 @Value值为 null。

解决方法: 使用一个类来读取配置

@Component
@Data
public class JwtProperty {

    @Value("${jwt.header}")
    private String header;

    @Value("${jwt.tokenHead}")
    private String tokenHead;

    @Value("${jwt.secret}")
    private String secret;

    @Value("${jwt.checkPath}")
    private String checkPath;

    @Value("${jwt.expiration}")
    private Integer expire;

    public JwtProperty() {
    }
}

然后将其注入到config中

@Configuration
public class JwtConfig {

    @Autowired
    private JwtProperty jwtProperty;

在 构造JwtFilter时,作为参数传入构造函数

new JwtFilter(jwtProperty)
则,在 JwtFilter对象中就可以使用相关的配置信息了

原文地址:https://www.cnblogs.com/a-du/p/10836492.html

时间: 2024-11-01 01:49:30

@Value()读取配置文件属性,读出值为null的问题的相关文章

SpringBoot读取配置值的方式

SpringBoot读取配置值的方式 方法一: @Value注解的方式取值 设定appliction.properties的配置信息 xiaoming.sex=boy xiaoming.age=18 xiaoming.score=98 使用@Value取值 @RestController public class PersonController { @Value("${xiaoming.sex}") private String sex; @Value("${xiaomin

solr分布式索引【实战一、分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例】

1 private static Properties prop = new Properties(); 2 3 private static String confFilePath = "conf" + File.separator + "config.properties";// 配置文件目录 4 static { 5 // 加载properties 6 InputStream is = null; 7 InputStreamReader isr = null;

Spring 中 Xml配置文件属性的说明

Xml配置文件属性的说明: <bean id="TheAction" ⑴ class="net.xiaxin.spring.qs.UpperAction" ⑵ singleton="true" ⑶ init-method="init" ⑷ destroy-method="cleanup" ⑸ depends-on="ActionManager" ⑹ > <propert

Linux下程序启动之后的初始化---检查配置文件及读取日志配置项的值

概述 最近,我对本开发组的几位新员工所编写的程序进行了代码走查,发现他们的代码都有一个共同的问题:缺少必要的初始化.在本文中,我将详细介绍程序在启动时所必须要进行的初始化操作,并用实际的C代码予以说明. 对于一般的程序来说,在启动时所必须要进行的初始化操作有两个:检查配置文件及读取日志配置项.对于检查配置文件,主要检查配置文件是否是规定的文件类型(后缀是否正确)及是否存放在了规定的目录下(一般存放在当前用户的etc目录下):对于读取日志配置项,主要将写日志文件相关的参数(如日志级别.日志文件最大

从属性文件中读取配置

本章是关于如何在Selenium Cucumber Framework 或任何框架中从属性文件中读取配置的.在项目中存储硬编码值是危险的,也违反了编码原则.到目前为止,我们在代码中使用了大量的硬编码值.在属性文件的帮助下,我们将逐一消除这些硬编码值. 什么是Java中的Property文件 .properties  文件主要用于Java程序,以维护项目配置数据,数据库配置或项目设置等.属性文件中的每个参数都以键值对格式存储为一对字符串,其中每个键都在一行上.您可以使用 Properties类型的

JavaWEB中读取配置信息

第一种方法是使用java.io和java.util包,缺点是路径的概念要清晰, 例子: Properties prop = new Properties(); InputStream in = getClass().getResourceAsStream("/common.properties"); try { prop.load(in); pool = new JedisPool(config, prop.getProperty("pay.redis.url"))

NHibernate之配置文件属性说明

一.NHibernate配置所支持的属性 属性名 用途 dialect 设置NHibernate的Dialect类名 - 允许NHibernate针对特定的关系数据库生成优化的SQL 可用值: full.classname.of.Dialect, assembly default_schema 在生成的SQL中, 将给定的schema/tablespace附加于非全限定名的表名上. 可用值: SCHEMA_NAME use_outer_join 允许外连接抓取,已弃用,请使用max_fetch_

ASP.NET Core实现强类型Configuration读取配置数据

前言 实现读取JSON文件几种方式,在项目中采取老办法简单粗暴,结果老大过来一看,恩,这样不太可取,行吧那我就用.NET Core中最新的方式诺,切记,适合的才是最好的,切勿懒. .NET Core读取JSON文件通过读取文件方式 当我将VS2015项目用VS2017打开后再添加控制器,此时会报错如下: 此时我们应该在该项目中的.csproj中添加如下这一句才能解决此问题: <ItemGroup> <DotNetCliToolReference Include="Microso

NHibernate初入门之配置文件属性说明(四)

一.NHibernate配置所支持的属性 属性名 用途 dialect 设置NHibernate的Dialect类名 - 允许NHibernate针对特定的关系数据库生成优化的SQL 可用值: full.classname.of.Dialect, assembly default_schema 在生成的SQL中, 将给定的schema/tablespace附加于非全限定名的表名上. 可用值: SCHEMA_NAME use_outer_join 允许外连接抓取,已弃用,请使用max_fetch_