Spring Security集成JWT报错:找不到RsaKeyProperties类型Bean
问题根源
你的RsaKeyProperties虽标注了@ConfigurationProperties注解,但未被Spring容器注册为Bean,导致SecurityConfig构造函数注入时找不到对应实例。
解决方法
方法一:通过@EnableConfigurationProperties注册Bean
修改SecurityConfig类,完善@EnableConfigurationProperties注解,明确指定要注册的配置属性类:
@Configuration @EnableWebSecurity @EnableConfigurationProperties(RsaKeyProperties.class) // 指定要注册的配置类 public class SecurityConfig { private final LoginAuthFilter loginAuthFilter; private final RsaKeyProperties rsaKeyProperties; public SecurityConfig(LoginAuthFilter loginAuthFilter, RsaKeyProperties rsaKeyProperties) { this.loginAuthFilter = loginAuthFilter; this.rsaKeyProperties = rsaKeyProperties; } // 原有Bean方法保持不变... }
此方式无需修改RsaKeyProperties代码,@EnableConfigurationProperties会自动将指定类注册为Spring Bean并完成配置绑定。
方法二:给RsaKeyProperties添加@Component注解
直接在RsaKeyProperties上添加@Component,让Spring组件扫描时将其注册为Bean:
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; @ConfigurationProperties(prefix ="rsa") @Component // 添加组件注解 public record RsaKeyProperties(RSAPublicKey publicKey, RSAPrivateKey privateKey) { }
注意:确保RsaKeyProperties所在包被Spring组件扫描覆盖(比如属于主启动类所在包的子包,或通过@ComponentScan指定扫描范围)。
额外配置检查
确认配置文件中RSA密钥格式正确,示例如下:
application.yml
rsa: public-key: | -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxQ... -----END PUBLIC KEY----- private-key: | -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQ... -----END PRIVATE KEY-----
application.properties
rsa.public-key=-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxQ... -----END PUBLIC KEY----- rsa.private-key=-----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxQ... -----END PRIVATE KEY-----
配置完成后,Spring会将配置文件中的密钥绑定到RsaKeyProperties属性,同时该类作为Bean注入到SecurityConfig中。
内容的提问来源于stack exchange,提问作者Wabi-Sabi
相关产品推荐
相关产品推荐

