私はローカルのログインをしています。
春のBcrypt
を使いたいですが、アプリケーションの起動時にこのエラーが発生します。
_Field bCryptPasswordEncoder in com.alert.interservices.uaa.Bootstrap required a bean of type 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder' that could not be found.
_
Bcrypt
を使用するには、コントローラでそれを自動化し、パスワードを暗号化します。データベースを埋めるときに、Bootstrapで同じことをしました。
コントローラ:
_@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
/**
*
* @param user the user that is trying to access
* @return the user if it is successfull or a bad request if not
*/
@RequestMapping(value = "/authenticate", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public Object authenticate(@RequestBody UserEntity user) {
logger.debug("Begin request UAAController.authenticate()");
String encriptedPasswd=bCryptPasswordEncoder.encode(user.getPassword().getPassword());
UserEntity usr = authenticationService.authenticate(user.getName(), encriptedPasswd);
(...)
_
ブートストラップ:
_@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
@GetMapping("/test")
public void fillDatabse() {
String encodedPw=bCryptPasswordEncoder.encode("test");
Password p = new Password(encodedPw);
_
私は何の間違っていますか?
BCryptPasswordEncoder
はBeanではありません、あなたはそれを自動反論することはできません。
使用する:
Password p = new Password(new BCryptPasswordEncoder().encode(encodedPw));
_
それ以外の
String encodedPw=bCryptPasswordEncoder.encode("test");
Password p = new Password(encodedPw);
_
そして取り除きます
@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
_
これらの変更もあなたのコントローラに変えます
@SpringBootApplication
、@Configuration
で注釈付きのパッケージスキャンクラスのいずれかに次のコードを入れることで、BCryptPasswordEncoder
のBeanを提供できます。
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
単純に、あなたは@springBootApplicationまたはこのようなクラスのいずれかにBeanを提供することができます
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
_
その後、サービス内でBcriptを自動化して、以下の例のように使用できます。
@Autowired
private PasswordEncoder passwordEncoder;
public Users createUser(@RequestBody Users userEntity) {
userEntity.setPassword(passwordEncoder.encode(userEntity.getPassword()));
return userRepo.save(userEntity);
}
_