💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
如其中一个密码没有id,如“密码存储格式”一节中所述,会发生以下错误。 ~~~ java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null" at org.springframework.security.crypto.password.DelegatingPasswordEncoder$UnmappedIdPasswordEncoder.matches(DelegatingPasswordEncoder.java:233) at org.springframework.security.crypto.password.DelegatingPasswordEncoder.matches(DelegatingPasswordEncoder.java:196) ~~~ 解决错误的最简单方法是切换到显式提供密码编码的`PasswordEncoder`。 解决问题的最简单方法是弄清楚当前如何存储密码并明确提供正确的`PasswordEncoder`。 如果要从Spring Security 4.2.x迁移,则可以通过公开`NoOpPasswordEncoder` bean来恢复到先前的行为。 例如,如果您使用的是Java配置,则可以创建如下配置: ~~~ @Bean public static NoOpPasswordEncoder passwordEncoder() { return NoOpPasswordEncoder.getInstance(); } ~~~ 如果使用xml配置,如下: ~~~ <b:bean id="passwordEncoder" class="org.springframework.security.crypto.password.NoOpPasswordEncoder" factory-method="getInstance"/> ~~~ 或者,您可以使用正确的ID为所有密码添加前缀,并继续使用`DelegatingPasswordEncoder`。 例如,如果您使用的是BCrypt,则可以从以下内容中迁移密码: ~~~ $2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG ~~~ 改为 ~~~ {bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG ~~~ 有关映射的完整列表,请参阅`PasswordEncoderFactories`上的Javadoc。