@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對象中就可以使用相關的配置信息了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM