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

如何为Spring Authorization Server自动装配指定的PasswordEncoder Bean

解决Spring Authorization Server多PasswordEncoder Bean冲突问题

方案一:将目标编码器设为Primary Bean

在v1Encoder的Bean定义上添加@Primary注解,让Spring自动装配PasswordEncoder类型时优先选择该Bean:

@Bean("v1-encoder")
@Primary
fun v1Encoder(): PasswordEncoder {
    return V1PasswordEncoder()
}

@Bean("v0-encoder")
fun v0Encoder(): PasswordEncoder {
    return V0PasswordEncoder()
} 

方案二:在授权服务器配置中手动指定编码器

修改OAuth2ServerSecurityConfig,显式配置授权服务器使用v1-encoder:

@Configuration
class OAuth2ServerSecurityConfig {

    @Autowired
    @Qualifier("v1-encoder")
    private lateinit var v1PasswordEncoder: PasswordEncoder

    @Bean
    @Order(1)
    fun authorizationServerSecurityFilterChain(http: HttpSecurity): SecurityFilterChain {
        OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http)
        http.getConfigurer(OAuth2AuthorizationServerConfigurer::class.java)
            .oidc(Customizer.withDefaults())
            // 为客户端认证指定编码器
            .clientAuthentication { clientAuth ->
                clientAuth.passwordEncoder(v1PasswordEncoder)
            }
        return http.build()
    }

    @Bean
    fun authorizationServerSettings(): AuthorizationServerSettings {
        return AuthorizationServerSettings.builder().build()
    }

    @Bean
    fun registeredClientRepository(): RegisteredClientRepository {
        val registeredClient = RegisteredClient.withId(UUID.randomUUID().toString())
            .clientId("client")
            .clientSecret("{bcrypt}secret")
            .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
            .build()

        return InMemoryRegisteredClientRepository(registeredClient)
    }
}

方案三:定义专门供授权服务器使用的编码器Bean

通过包装v1-encoder,创建一个Spring能自动识别的全局可选编码器:

@Bean
fun authorizationServerPasswordEncoder(@Qualifier("v1-encoder") encoder: PasswordEncoder): PasswordEncoder {
    return encoder
}

授权服务器调用OAuth2ConfigurerUtils.getOptionalBean时,会自动拾取这个Bean。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:45:35