king

Spring Security 如何实现多种加密方案共存

king 安全防护 2022-12-19 446浏览 0

Spring Security 如何实现多种加密方案共存

这篇文章中,松哥给大家介绍了两种密码加密方案,但是两种都是独立使用的!能不能在同一个项目中同时存在多种密码加密方案呢?答案是肯定的!

今天松哥就来和大家聊一聊,如何在 Spring Security 中,让多种不同的密码加密方案并存。

为什么要加密?常见的加密算法等等这些问题我就不再赘述了,大家可以参考之前的:Spring Boot 中密码加密的两种姿势!,咱们直接来看今天的正文。

1.PasswordEncoder

在 Spring Security 中,跟密码加密/校验相关的事情,都是由 PasswordEncoder 来主导的,PasswordEncoder 拥有众多的实现类:

Spring Security 如何实现多种加密方案共存

这些实现类,有的已经过期了,有的用处不大。对于我们而言,最常用的莫过于 BCryptPasswordEncoder。

PasswordEncoder 本身是一个接口,里边只有三个方法:

publicinterfacePasswordEncoder{
Stringencode(CharSequencerawPassword);
booleanmatches(CharSequencerawPassword,StringencodedPassword);
defaultbooleanupgradeEncoding(StringencodedPassword){
returnfalse;
}
}
  • encode 方法用来对密码进行加密。
  • matches 方法用来对密码进行比对。
  • upgradeEncoding 表示是否需要对密码进行再次加密以使得密码更加安全,默认为 false。

PasswordEncoder 的实现类,则具体实现了这些方法。

2.PasswordEncoder 在哪里起作用

对于我们开发者而言,我们通常都是在 SecurityConfig 中配置一个 PasswordEncoder 的实例,类似下面这样:

@Bean
PasswordEncoderpasswordEncoder(){
returnnewBCryptPasswordEncoder();
}

剩下的事情,都是由系统调用的。今天我们就来揭开系统调用的神秘面纱!我们一起来看下系统到底是怎么调用的!

首先,松哥在前面的文章中和大家提到过,Spring Security 中,如果使用用户名/密码的方式登录,密码是在 DaoAuthenticationProvider 中进行校验的,大家可以

继续浏览有关 安全 的文章
发表评论