密码存储
PasswordEncoder
接口用于执行密码的单向转换,以安全地存储密码。通常用于数据库密码和用户提供的密码进行比对。
委托密码编码器
在 Spring Security 5.0 之前, PasswordEncoder
的默认设置是 NoOpPasswordEncoder
他需要纯文本密码。
之后 Spring Security 发现有许多应用程序使用无法轻松迁移的旧密码编码 所以又引入了 DelegatingPasswordEncoder
委托密码编码器 来解决问题
-
确保使用当前密码存储建议对密码进行编码
-
允许验证现代和传统格式的密码
-
允许将来升级编码
// 创建默认 DelegatingPasswordEncoder
PasswordEncoder passwordEncoder =
PasswordEncoderFactories.createDelegatingPasswordEncoder();
// 创建自定义 DelegatingPasswordEncoder
String idForEncode = "bcrypt";
Map encoders = new HashMap<>();
encoders.put(idForEncode, new BCryptPasswordEncoder());
encoders.put("noop", NoOpPasswordEncoder.getInstance());
encoders.put("pbkdf2", new