简单理解Security的PasswordEncoder(密码编辑器)

SpringSecurity提供多种PasswordEncoder实现,如BCryptPasswordEncoder,用于密码加密。在注册时,需用相同编码器加密存储密码。DelegatingPasswordEncoder可根据密码前缀自动选择加密方式,适应多加密方式的数据库,便于密码认证。此功能适用于老系统升级或兼容多种加密策略。
摘要由CSDN通过智能技术生成

简单来说,Security提供了多种的加密方式,我们只需要通过注入不同的PasswordEncoder的实例对象到Spring容器中,Security就会采用不同的加密方式为我们提供服务

eg:举个栗子,我们采用注入BCryptPasswordEncoder的方式指定密码编辑器

此时Security就会采用该实例对象的加密方式为我们进行密码的加密操作,比如123加密之后就变成了$2a$10$TKMFT4Wm7GkeLNRHbL39Ge5AkccoEgwnXxiDNPyA3nc9t7D.Om7fO

在我们进行登录的时候,security就会将前端接收到的password用该密码编辑器进行加密,加密之后再和数据库查询出来的密码进行比对,如果相同则代表用户认证成功(因此注册的时候记得使用相同的密码编辑器进行加密后再存储密码,否则加密出来后对应不上就会导致认证失败哦!)

简单来说,我们提供什么PasswordEncoder实例,Security就会在认证的时候采用相同的加密方式将传入的password进行加密,然后与数据库查询出来的密码进行比对

DelegatingPasswordEncoder

由于Security为不同的密码加密方式提供了不同的前缀id,比如使用明文存储我们需要使用{noop}将其标注,如{noop}123,代表密码明文存储的123,这样security就不会采用passwordEncoder加密后再进行比对。其他的加密方式也有不同的前缀id,比如md5加密或BCrypt加密都有不同的前缀id,而DelegatingPasswordEncoder会根据数据库查询出来的密码的不同前缀,采用不同的加密方式加密接收的password后再和数据库密码比对,利用这个特性就算数据库用多种不同的加密方式的密码,也可以顺利认证,这个好像是security默认的密码编辑器,但是可能由于兼容性好但效率较低的原因一般都会替换为某一种单独的密码编辑器如BCrypt

不过感觉一般用不太上,除非是运行了很久历经了很多不同加密时代的系统了,不过Security还提供了将数据库密码升级成指定加密方式的功能,比如将数据库的md5加密密码全部升级成Bcrypt,有兴趣的小伙伴可以去了解一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值