数据库账号密码加密详解及实例
程序员文章站
2023-12-01 21:54:58
数据库账号密码加密详解及实例
数据库中经常有对数据库账号密码的加密,但是碰到一个问题,在使用userservice对密码进行加密的时候,spring security 也...
数据库账号密码加密详解及实例
数据库中经常有对数据库账号密码的加密,但是碰到一个问题,在使用userservice对密码进行加密的时候,spring security 也是需要进行同步配置的,因为spring security 中验证的加密方式是单独配置的。如下:
<authentication-manager> <authentication-provider user-service-ref="userdetailservice"> <password-encoder ref="passwordencoder" /> </authentication-provider> </authentication-manager> <beans:bean class="com.sapphire.security.mypasswordencoder" id="passwordencoder"> <beans:constructor-arg value="md5"></beans:constructor-arg> </beans:bean>
如上述配置文件所示,passwordencoder才是在spring security对账号加密校验的地方。
spring security在拦截之后,会首先对用户进行查找,通过自己定义的userdetailservice来找到对应的用户,然后由框架进行密码的匹配验证。
从userdetailservice得到user以后,就会进入到daoauthenticationprovider中,这是框架中定义的 ,然后跳入其中的authenticate方法中。
该方法会进行两个检查,分别是
* preauthenticationchecks : 主要进行的是对用户是否过期等信息的校验,调用的方法在userdetail中有定义的。 * additionalauthenticationchecks : 这个就是用户名密码验证的过程了。
而passwordencoder是我们xml中注入的bean,所以了,我们调用的则是我们自己完成的passwordencoder
public class mypasswordencoder extends messagedigestpasswordencoder { public mypasswordencoder(string algorithm) { super(algorithm); } @override public boolean ispasswordvalid(string encpass, string rawpass, object salt) { return encpass.equals(digestutils.md5digestashex(rawpass.getbytes())); } }
这是我对其实现的一个简单版本,调用的就是spring自带的加密算法,很简单了,当然也可以使用复杂的加密方法,这个就靠自己了
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!