java-在Filter中具有@Value属性的SpringBoot为null
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-在Filter中具有@Value属性的SpringBoot为null,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1920字,纯文字阅读大概需要3分钟。
内容图文
![java-在Filter中具有@Value属性的SpringBoot为null](/upload/InfoBanner/zyjiaocheng/686/961099a6617c4bcbaef7ec403db97455.jpg)
我正在使用SpringBoot的@Value注释从默认的application.properties文件填充对象属性,但是在Filter覆盖中看到一些奇怪的行为.
我的调试器中有两个断点:
@Component
public class BasicFilter implements Filter {
@Value("${aad.client_id}")
private String clientId;
@Bean
public FilterRegistrationBean registerFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new BasicFilter()); // <-- 1.
registration.addUrlPatterns("/secure/*");
return registration;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (request instanceof HttpServletRequest) { // <- 2.
HttpServletRequest httpRequest = (HttpServletRequest) request;
...
在1.:this.client_id设置为“ foo”(来自application.properties
A2 2.:this.client_id为空
对不同/缺失值有任何解释吗?
解决方法:
您正在向FilterRegistrationBean中注入新的BasicFilter().在这种情况下,您正在创建一个新对象,但它不是Spring托管的bean,因此其clientId将为空.所以基本上您现在有2个实例:
>由于@Component注释,由Spring创建的一个
>使用new关键字(不是由Spring管理)注入到FilterRegistrationBean中的一个
您可能应该将registerFilter()方法移动到单独的配置类(用@Configuration注释),然后将BasicFilter bean自动装配/注入到该方法中,例如:
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean registerFilter(BasicFilter filter) { // Inject it
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(filter); // Use it
registration.addUrlPatterns("/secure/*");
return registration;
}
}
可选地,如果您想将@Bean方法保留在过滤器本身中,则应将其替换为该方法,因为当前对象是由Spring管理的,而新实例则不会:
@Bean
public FilterRegistrationBean registerFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(this);
registration.addUrlPatterns("/secure/*");
return registration;
}
相关:Spring @Value annotation always evaluating as null?
内容总结
以上是互联网集市为您收集整理的java-在Filter中具有@Value属性的SpringBoot为null全部内容,希望文章能够帮你解决java-在Filter中具有@Value属性的SpringBoot为null所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。