SpringSecurity系列(三十一)】Spring Security 如何实现多种加密方案共存
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
《深入浅出Spring Security》是由清华大学出版社出版的一本关于Spring Security的书籍,旨在帮助读者全面学习并掌握Spring Security。
松哥之前探讨了密码加密方案,并提出在同一项目中可以存在多种密码加密方案。本文是Spring Security系列的第31篇,旨在说明如何在Spring Security中同时使用多种密码加密方案。本系列的其他文章从初识Spring Security到高级主题如微服务、单点登录和各种安全防护等内容皆有涉及。
文章解释了在Spring Security中管理密码加密/校验的是PasswordEncoder接口及其实现类,特别指出BCryptPasswordEncoder是最常用的实现类。PasswordEncoder接口定义了三个方法:encode、matches和upgradeEncoding,分别用于密码加密、密码校验和判断是否需要对密码进行再次加密。
在开发中,通常在SecurityConfig中配置PasswordEncoder的实例。DaoAuthenticationProvider是用于校验用户名/密码登录的组件,它在创建时会指定默认的PasswordEncoder。如果开发者自定义了PasswordEncoder实例,那么系统会使用这个自定义的实例。
如果没有进行任何密码加密配置,系统将提供默认的PasswordEncoder。这个默认的PasswordEncoder是由PasswordEncoderFactories类创建的,它包含了多种密码加密方式,并且使用DelegatingPasswordEncoder作为代理来管理这些不同的密码加密方式。
DelegatingPasswordEncoder类是一个代理类,它可以根据密码的前缀来确定使用哪种加密方式。如果没有找到对应的加密方式,将使用默认的加密方式进行密码校验。
想要了解更多内容?