一、问题描述
自定义一个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