企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
在Spring Security 5.0之前,默认的`PasswordEncoder`是`NoOpPasswordEncoder`,它需要纯文本密码。 根据密码历史记录部分,您可能希望默认的`PasswordEncoder`现在类似于`BCryptPasswordEncoder`。 但是,这忽略了三个现实世界的问题: * 有许多使用旧密码编码的应用程序无法轻松迁移 * 密码存储的最佳实践将再次发生变化。 * 作为一个框架,Spring Security无法经常进行重大更改 相反,Spring Security引入了`DelegatingPasswordEncoder`,它通过以下方式解决了所有问题: * 确保使用当前密码存储建议对密码进行编码 * 允许验证现代和传统格式的密码 * 允许将来升级编码 您可以使用`PasswordEncoderFactories`轻松构造`DelegatingPasswordEncoder`的实例: ~~~ PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); ~~~ 或者,您可以自定义实例。 例如: ~~~ String idForEncode = "bcrypt"; Map encoders = new HashMap<>(); encoders.put(idForEncode, new BCryptPasswordEncoder()); encoders.put("noop", NoOpPasswordEncoder.getInstance()); encoders.put("pbkdf2", new Pbkdf2PasswordEncoder()); encoders.put("scrypt", new SCryptPasswordEncoder()); encoders.put("sha256", new StandardPasswordEncoder()); PasswordEncoder passwordEncoder = new DelegatingPasswordEncoder(idForEncode, encoders); ~~~