美文网首页
Shiro 修改认证时的密码比对

Shiro 修改认证时的密码比对

作者: LOok_阳阳 | 来源:发表于2018-09-21 17:17 被阅读0次

    先说结论

    在继承AuthorizingRealm类的方法中添加代码,初始化 HasedCrendentialsMatcher 对象,替换当前 Realm 的 crendentialsMatcher 属性;
    例如:

    public class ShiroRealm extends AuthorizingRealm {
        {
            HashedCredentialsMatcher mather = new HashedCredentialsMatcher();
            // 加密方式
            mather.setHashAlgorithmName("md5");
            // 密码进行两次运算
            mather.setHashIterations(2);
            this.setCredentialsMatcher(mather);
        }
    
        /**
         *
         * 获取用户权限,角色信息进行配置
         *
         * **/
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
            log.info("用户角色,权限开始分配");
            ...
            return authorizationInfo;
        }
    
        /**
         *
         * 进行常规的信息验证
         *
         * **/
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
            log.info("用户认证开始");
            ...
          SimpleAuthenticationInfo
            SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user, user.getPassword(), credentialsSalt, getName());
            return authenticationInfo;
        }
    }
    

    再次登录的时候,shiro会按照上述的加密方式去加密,然后与SimpleAuthenticationInfo提供的密码(数据库存储的用码)比对。

    再说过程

    Realm 的 crendentialsMatcher 属性是配置密码匹配的方式,如果没有配置 credentialsMatcher 则默认使用 SimpleCredentialsMatcher 类,实现 CredentialsMatcher 接口,SimpleCredentialsMatcher 类不会对密码进行任何处理直接进行比对。

    image.png

    HashedCredentialsMatcher 类继承SimpleCredentialsMatcher 类,对密码加盐加密处理重写了doCredentialsMatch()方法(大概截图,具体查看源码)。所以我们需要初始化 HasedCrendentialsMatcher 对象,替换当前 Realm 的 crendentialsMatcher 属性。

    image.png

    相关文章

      网友评论

          本文标题:Shiro 修改认证时的密码比对

          本文链接:https://www.haomeiwen.com/subject/tccznftx.html