zoukankan      html  css  js  c++  java
  • 数据库账号密码加密

    数据库中经常有对数据库账号密码的加密,但是碰到一个问题,在使用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自带的加密算法,很简单了,当然也可以使用复杂的加密方法,这个就靠自己了

  • 相关阅读:
    python学习Day21--内置函数、反射
    python学习Day20--属性、类方法和静态方法+类多继承算法补充
    python学习Day19--面向对象的三大特性
    python学习Day18--继承
    python学习Day17--名称空间
    python学习Day16--面向对象
    python学习Day15--递归与二分查找
    python学习Day14--内置函数
    c# 深克隆与浅克隆
    css test-align 和 margin 居中什么区别
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461598.html
Copyright © 2011-2022 走看看