Spring Security系列二 用户登录认证数据库实现中,我们已经把对用户的认证改成了数据库实现,功能上虽然完成了,但是用户的密码却都是以明文保存的,这在实际项目中安全系数上会有所欠缺。在本章中我们将实现如何对用户的密码进行加密。
在中,对密码的加密都是由来完成的。
那什么时候会调用这个呢?这就要回到前面实现数据库登录认证时的了。在中,除了之外还有其它的几个属性,其中一个就是,前面我们已经实现了,现在要实现,密码加密功能主要就是靠它来完成。
其实在中,已经对有了很多实现,包括加密、加密等等,一般情况下我们只要直接拿来用就可以了。
查看类的方法:
会发现参数类型居然是类型,这是因为在内置的中,又分了两条路线,应该是随着版本的更新优化而衍生的,但为了兼容老版本所以两个都保留了下来,这里就都分别介绍一下。
老的PasswordEncoder
具体是指接口:。
之所以说它老是因为在该接口上已经标了注解不推荐使用了,但相应的实现类却没有标注,所以目前使用上依然是相当广泛的,很多人可能并不知道已经了。
它的类图结构如下:
可以看到有很多常用的已经有实现了,这里拿最常用的来做示例。
想要使用密码加密就必须指定使用哪个,但是在中并没有可以快速指定的地方,所以这里必须自己声明,然后设置和,具体代码如下:
需要注意在中设置了就要把原先的去掉,不然就会有两个的调用和认证,结果必然是一次正确一次不正确,返回你预期之外的结果。
新的PasswordEncoder
具体是指接口:,这是spring当前推荐使用的接口。
它的类图如下:
实现类只有三个,简单明了,但加密安全性却提高了。
不多说了,啥也不做按原文本处理,相当于不加密。
1024次迭代的散列哈希加密实现,并使用一个随机8字节的salt。
使用BCrypt的强散列哈希加密实现,并可以由客户端指定加密的强度,强度越高安全性自然就越高,默认为10.
在的注释中,明确写明了如果是开发一个新的项目,是较好的选择。
代码示例:
不得不说这名字取的很贴切。
在很多时候我们可能需要给密码加点指定的前缀或后缀,以防止像这类简单的密码被反向激活成功教程,这时候就会用到了。
其实随着的更换目前已是不推荐使用了,但是有必要了解一下它,以及它背后的目的是什么,以实现更好的密码安全性。
类图如下:
的目的就是混淆一下密码然后再进行加密,防止加密后的字符串被反向激活成功教程。像可以指定对象的某个属性值添加到密码中以增加安全性。
这里为简单起见,我们自己实现一个,在密码中加固定的字母:
然后指定使用:
启动项目,打上断点调试,发现在我们的密码后面加上了:
自然加密后的字符串也相应变了,加强了密码的安全性。
需要注意只针对老的而言,新的已经不需要使用来加强密码的安全性了,因为它的强度可以由用户指定,强度不同加密后的字符串自然也不同,安全性已经足够了,就算你想加也会抛出下面的异常:
以上说了密码的加密校验,有个前提当然是你在保存数据的时候密码加密方式得和这个保持一致,这个也不用自己实现,既然已经有了直接把拿来用就行:
到此这篇spring数据库密码加密解密(spring.datasource.password加密)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sjkxydsj/62501.html