申请后,我在Spring安全性中遇到以下错误:
PasswordEncoderFactories.createDelegatingPasswordEncoder()
项目依赖项:
我尝试使用以下两种方法:
第一种方法:
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
final PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
auth.inMemoryAuthentication()
.withUser("user")
.password(encoder.encode("password"))
.roles("USER");
}
错误:
java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
at org.springframework.security.crypto.password.DelegatingPasswordEncoder$UnmappedIdPasswordEncoder.matches
第二:方法-
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
final BCryptPasswordEncoder bcrypt = new BCryptPasswordEncoder();
auth.inMemoryAuthentication()
.withUser("user")
.password(encoder.encode("password"))
.roles("USER");
}
错误:
java.lang.IllegalArgumentException: password is not bcrypt type
我没有尝试过{noop}密码,因为它已经从Spring5中删除了。 在网站上看到了许多解决方案,但无法解决我的问题。
答案 0 :(得分:0)
我有相同的错误消息,只是解决了。
您的第一种方法
PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
auth.inMemoryAuthentication()
.withUser("user")
.password(encoder.encode("password"))
.roles("USER");
仅是解决方案的第一步。
我认为您还实现了 AuthorizationServerConfigurerAdapter 。在此适配器实现中,您指定了导致错误的 ClientSecret 。
clients.inMemory()
.withClient("ClientIdValue")
.secret("ClientSecretValue")
.authorizedGrantTypes("password", "refresh_token")
您应该像在方法中一样添加 {noop} 或 PasswordEncoder 来解决问题。
clients.inMemory()
.withClient("ClientIdValue")
.secret("{noop}ClientSecretValue")
.authorizedGrantTypes("password", "refresh_token")