zoukankan      html  css  js  c++  java
  • 006 加密

    一 . 概述

      在前面我们的自定义Realm之中有一个问题,就是我们的密码是明文的,这个在实际的项目之中是不可能存在的.

      在shiro之中,提供了加密的模块.我们可以使用各种加密的方式进行加密.

      本节就介绍一下加密组件的使用.


     二 . 加密组件

      首先看一下shiro为我们提供的Hash加密类结构.

    我们看到整个类的继承结构图,发现我们可以使用的类就是SimpleHash这个类.

    我们使用一下这个类:  

        public static void main(String[] args) {
            SimpleHash hash = new SimpleHash("MD5","123","trek",2);
            System.out.println("加密之后为:"+hash.toString());
        }

    我们需要看一下结果,这个结果对我们的后面的密码校验器有关.

    加密之后为:ab89651adb0399faf79a858a45c8b4ff

    我们现在解释一个上面的参数信息:

      (1)加密的算法

      (2)加密字符串

      (3)盐值

      (4)加密次数


    三 .密码匹配器

      我们知道我们的密码信息在数据库之中保存的都是密文的.

    现在我们使用一个密码匹配器完成这个操作.

    realm=com.trek.shiro.base.CustomRealm
    mather=org.apache.shiro.authc.credential.HashedCredentialsMatcher
    mather.hashAlgorithmName=md5
    mather.hashIterations=2
    realm.credentialsMatcher=$mather
    securityManager.realm=$realm

    我们配置了一个密码匹配器,其中设置了加密的算法和加密的次数.

    然后我们修改一下我们的认证Realm.

        //认证方法
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken info) throws AuthenticationException {
            //获取账号和密码
            UsernamePasswordToken token = (UsernamePasswordToken) info;
            String username = token.getUsername();
            String password = new String(token.getPassword());
            //这里模拟一下认证
            if(!"trek".equals(username)) {
                throw new UnknownAccountException("账号不存在!");
            }
            if(!"123".equals(password)) {
                throw new IncorrectCredentialsException("密码不正确!!");
            }
            //此处说明认证是成功的了.
            //现在要返回用户的身份信息了
            SimpleAccount account = new SimpleAccount(username,"ab89651adb0399faf79a858a45c8b4ff",ByteSource.Util.bytes("trek"),getName());
            return account;                                        
        }

    注意我们将我们从数据库之中查询出的密码放置在SimpleAccount对象之中,然后shiro就会帮助我们自动匹配密码的正确性.


    四 .原理

      shiro内置了一个密码匹配器,当我们通过Realm之中返回密码信息之后,shiro就会拿这个密码匹配器将之前我们的token之中的密码按照密码匹配器的方式进行

        密码的获取,然后再进行比较.

    因此,当我们配置了一个密码匹配器之后,我们就能完成密码的匹配操作了.

  • 相关阅读:
    有限元方法的核心思想
    由拉格朗日函数推导守恒定律
    codeforces 1181D
    gym 102222 J
    COJ#10C
    已然逝去の夏日泳装
    NC50 E
    codeforces 1147 C
    agc 037 C
    19牛客多校第十场G
  • 原文地址:https://www.cnblogs.com/trekxu/p/9048803.html
Copyright © 2011-2022 走看看