[エラー]ここではID「null」のPasswordEncoderはマッピングされません
エラーバックグラウンド
Spring Boot Securityでログイン
There is no PasswordEncoder mapped for the id "null"
java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
at org.springframework.security.crypto.password.DelegatingPasswordEncoder$UnmappedIdPasswordEncoder.matches(DelegatingPasswordEncoder.java:254) ~[spring-security-crypto-5.6.2.jar:5.6.2]
at org.springframework.security.crypto.password.DelegatingPasswordEncoder.matches(DelegatingPasswordEncoder.java:202) ~[spring-security-crypto-5.6.2.jar:5.6.2]
at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$LazyPasswordEncoder.matches(WebSecurityConfigurerAdapter.java:595) ~[spring-security-config-5.6.2.jar:5.6.2]
at org.springframework.security.authentication.dao.DaoAuthenticationProvider.additionalAuthenticationChecks(DaoAuthenticationProv
@Service
public class CustomUserDetailsService implements UserDetailsService {
private static final Logger logger = LoggerFactory.getLogger(CustomUserDetailsService.class);
private final UserRepository userRepository;
public CustomUserDetailsService(
@Autowired UserRepository userRepository) {
this.userRepository = userRepository;
final UserEntity testUserEntity = new UserEntity();
testUserEntity.setUsername("entity_user");
testUserEntity.setPassword("test1pass");
this.userRepository.save(testUserEntity);
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
final UserEntity userEntity = userRepository.findByUsername(username);
return new User(username, userEntity.getPassword(), new ArrayList<>());
}
}
エラーの原因
パスワードを保存するには暗号化プロセスが必要です!
パスワードエンコーダを設定する必要があります
共通インタフェースPasswordEncoderの使用
PasswordEncoderとは?
パスワードの一方向暗号化をサポートするインタフェースであって、Spring Securityにパスワードを安全に記憶することができる.
会員が市場に入ると、平紋でDBにパスワードを保存することはお勧めしません.したがって、PasswordEncoderを使用して安全に保存するための一方向暗号化をサポートします.
修正されたコード
@Service
public class CustomUserDetailsService implements UserDetailsService {
private static final Logger logger = LoggerFactory.getLogger(CustomUserDetailsService.class);
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder; //추가
public CustomUserDetailsService(
@Autowired UserRepository userRepository,
@Autowired PasswordEncoder passwordEncoder //추가
) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
final UserEntity testUserEntity = new UserEntity();
testUserEntity.setUsername("entity_user");
testUserEntity.setPassword(passwordEncoder.encode("test1pass")); //바꿈
this.userRepository.save(testUserEntity);
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
final UserEntity userEntity = userRepository.findByUsername(username);
return new User(username, userEntity.getPassword(), new ArrayList<>());
}
}
Reference
この問題について([エラー]ここではID「null」のPasswordEncoderはマッピングされません), 我々は、より多くの情報をここで見つけました https://velog.io/@jupiter-j/에러-There-is-no-PasswordEncoder-mapped-for-the-id-nullテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol