Spring Boot Security配置报错UnsatisfiedDependencyException及代码告警问题
问题解决:Spring Security JWT配置中的空指针与过时代码问题
一、空指针错误原因及修复
报错Cannot invoke "Object.getClass()" because "filter" is null的核心原因是jwtAuthFilter未被Spring正确注入,导致实例为null。
修复步骤:
- 给
JwtAuthenticationFilter类添加@Component注解,让Spring扫描并创建该类的实例; - 或者在配置类中显式声明该Filter的Bean:
@Bean public JwtAuthenticationFilter jwtAuthFilter() { return new JwtAuthenticationFilter(); }
完成以上操作后,Spring就能正确注入jwtAuthFilter实例,避免空指针问题。
二、过时代码优化
编译器标记的过时问题,是因为Spring Security当前推荐使用Lambda风格配置替代传统的.and()链式调用。以下是优化后的完整配置代码:
package com.myapp.backend.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import lombok.RequiredArgsConstructor; @Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfiguration { private final AuthenticationProvider authenticationProvider; private final JwtAuthenticationFilter jwtAuthFilter; @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .csrf(csrf -> csrf.disable()) .authorizeHttpRequests(auth -> auth .requestMatchers("/auth/**").permitAll() .anyRequest().authenticated() ) .sessionManagement(session -> session .sessionCreationPolicy(SessionCreationPolicy.STATELESS) ) .authenticationProvider(authenticationProvider) .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class); return http.build(); } }
优化点说明:
- 用Lambda表达式替代
.and()调用,配置结构更清晰,符合Spring Security最新规范; - 给注入的成员变量添加
final修饰符,配合@RequiredArgsConstructor确保构造注入的正确性,避免潜在的空注入问题。
额外检查项
- 确认
AuthenticationProvider同样是Spring管理的Bean(通过@Bean或@Component声明),否则会出现类似的注入失败问题; - 确保
JwtAuthenticationFilter正确实现了JWT解析与用户认证逻辑,避免后续接口访问时的权限验证失败。
内容的提问来源于stack exchange,提问作者TheAmygdala
相关产品推荐
相关产品推荐

