You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Security过滤器使用@Autowired注入Bean触发NullPointerException问题

空指针异常触发原因

异常堆栈明确指向空指针发生在SimpleApplicationSettingManager的isConfigValue方法内,结合代码逻辑,概率从高到低有两类触发原因:

  1. 查询结果为空:applicationSettingsDao.getSettingsByKey(Constants.CONFIG_VALUE)执行时,数据库中不存在对应CONFIG_VALUE的配置记录,方法返回null,后续直接调用getValue()触发空指针。
  2. Dao注入失败:SimpleApplicationSettingManager中的ApplicationSettingsDao没有被Spring成功注入,调用getSettingsByKey时触发空指针,这种情况通常是组件扫描配置错误导致@Service、@Autowired注解未生效。
解决方案

针对查询结果为空的修复(优先处理)

修改isConfigValue方法的逻辑,增加空值校验,避免无意义的链式调用,同时确认数据库中存在对应配置:

@Override
public boolean isConfigValue() {
     ApplicationSettings settings = applicationSettingsDao.getSettingsByKey(Constants.CONFIG_VALUE);
     // 空值直接返回false,也可以根据业务需求返回对应默认值
     return settings != null && "true".equalsIgnoreCase(settings.getValue());
}

同时检查配置表中是否存在CONFIG_VALUE对应的记录,不存在则新增符合业务要求的默认值。

针对Dao注入失败的修复

  • 确认SimpleApplicationSettingManager所在的包路径已经被加入Spring的组件扫描范围,保证@Service注解可以被Spring识别。
  • 补充检查自定义过滤器的托管逻辑:如果你的AuthenticationProcessingFilter是手动new出来注册到Spring Security配置中的,过滤器本身不受Spring管理会导致内部@Autowired失效(当前堆栈中已经进入了Service方法逻辑,说明本次问题不属于这类,但后续改造建议按以下方式配置,避免注入异常):
    1. 给过滤器增加@Component注解交给Spring托管
    2. Security配置中直接注入过滤器实例,不要手动创建:
    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Autowired
        private AuthenticationProcessingFilter authenticationProcessingFilter;
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.addFilterAt(authenticationProcessingFilter, UsernamePasswordAuthenticationFilter.class);
            // 其余安全配置
        }
    }
    

内容的提问来源于stack exchange,提问作者Anand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:24:04