欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数据库账号密码加密详解及实例

程序员文章站 2023-10-23 23:14:05
数据库账号密码加密详解及实例 数据库中经常有对数据库账号密码的加密,但是碰到一个问题,在使用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自带的加密算法,很简单了,当然也可以使用复杂的加密方法,这个就靠自己了

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!