ソリューションをありがとう新しい、より良い(bcryptの)エンコーダからのレガシーMD5ハッシュと値の両方を受け入れ、1を見つけたときにMD5ハッシュを移行パスワードエンコーダを作成することです。
@Component
public class MigratingPasswordEncoder implements PasswordEncoder {
@Autowired
private org.springframework.security.crypto.password.PasswordEncoder passwordEncoder; // new encoder (BCrypt)
@Autowired
private Md5PasswordEncoder legacyEncoder;
@Autowired
private UserDao userDao; // where password hashes are stored
public String encodePassword(String rawPass, Object salt) {
return passwordEncoder.encode(rawPass);
}
public boolean isPasswordValid(String encPass, String rawPass, Object salt) {
if (legacyEncoder.isPasswordValid(encPass, rawPass, salt)) {
// MD5 hash found here, save a new hash instead
userDao.updatePassword(encPass, passwordEncoder.encode(rawPass));
return true;
}
return passwordEncoder.matches(rawPass, encPass);
}
}
非推奨ノート:これはorg.springframework.security.authentication.encoding
パッケージに古いPasswordEncoder
インターフェースを使用していますが、それはMd5PasswordEncoder
もそのインターフェイスを使用しているためので、かなり避けられません。
クレジット:Spring security 3.1.4 and ShaPasswordEncoder deprecationからのインスピレーション。