@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对象中就可以使用相关的配置信息了
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值