【目录】
- 背景
- 关于NoOpPasswordEncoding
- 其它Pasword Encoder
- 关于DelegatingPasswordEncoding
- 收获
0. 背景
在自定义配置Spring Security时,你或许会注意到这段代码。
@Bean
public static PasswordEncoder passwordEncoder() {
return NoOpPasswordEncoder().getInstance();
}
代码中提到的NoOpPasswordEncoder是什么?
关于NoOpPasswordEncoder
字面理解它是一个某某密码编译器(No Operate Password Encoder,即:无任何操作的密码密码编译器)。
看一下NoOpPasswordEncoder类的代码,通过注释了解到,该类已经弃用且不安全。它并不会对密码做什么操作,只是为了测试为目的的。也就是说在encode、matches过程中密码都是明文的。
所以在Spring文档中见到它,不足为奇了,因为它容易理解,但是真的在项目中使用Spring Security时不应该是NoOpPasswordEncoder.
其它Password Encoder
NoOpPasswordEncoder的注释中推荐我们有针对性的选择使用BCryptPasswordEncoder、Pbkdf2PasswordEncoder、SCryptPasswordEncoder中的一种。并推荐最好使用DelegatingPasswordEncoder,因为它支持密码升级。
暂时可以先这样理解:前三种都是根据某个算法对PasswordEncoder接口的具体实现,DelegatingPasswordEncoder是N种具体算法的代理实现。
通过这几个类的注释了解到BCryptPasswordEncoder、Pbkdf2PasswordEncoder、SCryptPasswordEncoder都是基于某种算法的PasswordEncoder接口的实现类。使用时需要根据需要,有选择的使用其中的一种即