• shiro 身份验证


    shiro身份验证:

      参考链接:http://jinnianshilongnian.iteye.com/blog/2019547

      即在应用中证明是本人进行操作,一般通过用户名来证明

      在shiro中,用户通过提供principals(身份)和credentials(证明)给shiro,从而进行验证

      principals:身份,即主体的标识属性,可以i是任何东西,如用户名、邮箱等,唯一即可;一个主体可以有多个principals,但只有一个Primary principals,一般是用户名、密码、手机号

      credentials:证明、凭证,即只有主体知道的安全值,如密码、数字证书等

    登录/登出:

      通过ini准备一些主体(实际应用中应该从数据库中获取):

    [users]
    draco = 615
    harry = 630

       测试:模仿用户登录

      @Test
        public void testLoginAndLogout(){
            
            //创建sessionFactory,使用ini配置文件初始化
            Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-first.ini");
          //创建securityManager实例
            SecurityManager securityManager = factory.getInstance();
            
            //将securityManager配置在当前运行环境中
            SecurityUtils.setSecurityManager(securityManager);
            
            //获取当前subject
            Subject currentUser = SecurityUtils.getSubject();
            
            //创建用户令牌
            UsernamePasswordToken token = new UsernamePasswordToken("draco", "615");
            
            //直接登录
            try {
                currentUser.login(token);
            } catch (UnknownAccountException uae) {
                log.debug("用户名不存在 ");
            } catch (IncorrectCredentialsException ice) {
                log.debug("密码错误 ");
            } catch (LockedAccountException lae) {
                log.debug("未知错误? ");
            }
            
            boolean authenticated = currentUser.isAuthenticated();
            log.debug("是否登陆成功:"+ authenticated);      
            
        }

      身份验证的流程:

        1 调用subject.login(token)进行登录,自动委托给SecurityManager

        2 SecurityManger负责真正的身份验证逻辑,通过SecurityManager.login()将身份验证委托给Authenticator

        3 Authenticator负责真正的身份验证,是Shiro API中核心的身份认证入口点

        4 Authenticator可能会委托给相应的AuthenticatorStrategy进行多Realm身份验证,默认ModularRealmAuthenticator会调用AuthenticationStrategy进行多Realm身份验证

        5 Authenticator会把相应的token传入Realm,从Realm获取身份验证信息,如果抛出异常表明身份验证失败

     

  • 相关阅读:
    斐波那契数列 (一些公式)
    TreeMap的应用
    Maximum Depth of Binary Tree,求树的最大深度
    Minimum Depth of Binary Tree,求树的最小深度
    层序遍历二叉树的两种方法
    Binary Tree Zigzag Level Order Traversal,z字形遍历二叉树,得到每层访问的节点值。
    Binary Tree Level Order Traversal,层序遍历二叉树,每层作为list,最后返回List<list>
    Symmetric Tree,对称树
    Same Tree,判断两个二叉树是不是相同的树,结构相同,每个节点的值相同
    Recover Binary Search Tree,恢复二叉排序树
  • 原文地址:https://www.cnblogs.com/roxy/p/7685002.html
Copyright © 2020-2023  润新知