web-dev-qa-db-ja.com

春のBcryptを使う

私はローカルのログインをしています。

春の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);
_

私は何の間違っていますか?

5
jose azevedo

BCryptPasswordEncoderはBeanではありません、あなたはそれを自動反論することはできません。

使用する:

Password p = new Password(new BCryptPasswordEncoder().encode(encodedPw));
 _

それ以外の

String encodedPw=bCryptPasswordEncoder.encode("test");
Password p = new Password(encodedPw);
 _

そして取り除きます

@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
 _

これらの変更もあなたのコントローラに変えます

4
Jens

@SpringBootApplication@Configurationで注釈付きのパッケージスキャンクラスのいずれかに次のコードを入れることで、BCryptPasswordEncoderのBeanを提供できます。

@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
    return new BCryptPasswordEncoder();
}

作業プロジェクトの例を参照

1
lealceldeiro

単純に、あなたは@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);
}
 _
0