首页 > 其他 > 详细

Shiro第二章Authentication

时间:2019-10-14 17:49:20      阅读:102      评论:0      收藏:0      [点我收藏+]
  • authentication认证

    认证(Authentication):身份验证的过程--也就是证明一个用户的真实身份。为了证明用户身份,需要提供系统理解和相信的身份信息和证据。
    需要通过向 Shiro 提供用户的身份(principals)和证明(credentials )来判定是否和系统所要求的匹配。
    Principals(身份) 是Subject的“标识属性”,可以是任何与Subject相关的标识
    Credentials(证明) 通常是只有 Subject 知道的机密内容,用来证明他们真正拥有所需的身份,一些简单的证书例子如密码、指纹、眼底扫描和X.509证书等

  • Authenticating Subjects

    Subject 验证的过程可以有效地划分分以下三个步骤:

    1.收集 Subject 提交的身份和证明;

    //最常用的情况是 username/password 对:
    UsernamePasswordToken token = new UsernamePasswordToken(username, password);
    //”Remember Me” 功能是内建的
    token.setRememberMe(true);


    2.向 Authentication 提交身份和证明;

    Subject currentUser = SecurityUtils.getSubject();
    currentUser.login(token);

    3.如果提交的内容正确,允许访问,否则重新尝试验证或阻止访问

    try {
        currentUser.login(token);
    } catch ( UnknownAccountException uae ) { ...
    } catch ( IncorrectCredentialsException ice ) { ...
    } catch ( LockedAccountException lae ) { ...
    } catch ( ExcessiveAttemptsException eae ) { ...
    } ... 捕获你自己的异常 ...
    } catch ( AuthenticationException ae ) {
        //未预计的错误?
    }

    Remembered vs. Authenticated
    记住的(Remembered):一个被记住的 Subject 不会是匿名的,拥有一个已知的身份(也就是说subject.getPrincipals())返回非空)。它的身份被先前的认证过程所记住,并存于先前session中,一个被认为记住的对象在执行subject.isRemembered())返回true。
    已验证(Authenticated):一个被验证的 Subject 是成功验证后(如登录成功)并存于当前 session 中,一个被认为验证过的对象调用subject.isAuthenticated()) 将返回true
    remembered和authentication是互斥的

    Logging Out

    currentUser.logout(); //清除验证信息,使 session 失效

    Authentication Sequence 认证顺序
    技术分享图片

    第1步:应用程序代码调用该Subject.login方法,并传入AuthenticationToken表示最终用户的主体和凭据的构造实例。
    第2步:Subject 实例,通常是一个 DelegatingSubject(或其子类)通过调用 securityManager.login(token )将这个令牌转交给程序的 SecurityManager。
    第3步:SecurityManager,基本的“安全伞”组件,得到令牌并通过调用 authenticator.authenticate(token))简单地将其转交它内部的 Authenticator 实例,大部分情况下是一个 ModularRealmAuthenticator 实例,用来支持在验证过程中协调一个或多个Realm实例。
    第4步:如程序配置了多个 Realm,ModularRealmAuthenticator实例将使用其配置的 AuthenticationStrategy 开始一个 多 Realm 身份验证的尝试。在 Realm 被验证调用的整个过程中,AuthenticationStrategy(安全策略)被调用用来回应每个Realm结果(
    如果仅有一个 Realm 被配置,它直接被调用--在单 Realm 程序中不需要AuthenticationStrategy
    第5步:每一个配置的 Realm 都被检验看其是否支持提交的AuthenticationToken,如果支持,则该 Realm 的 getAuthenticationInfo 方法随着提交的牌被调用,getAuthenticationInfo 方法为特定的 Realm 有效提供一次独立的验证尝试

 

AuthenticationStrategy认证策略

AuthenticationStrategyclassDescription
AtLeastOneSuccessfulStrategy 如果有一个或多个Realm验证成功,所有的尝试都被认为是成功的,如果没有一个验证成功,则该次尝试失败
FirstSuccessfulStrategy 只有从第一个成功验证的Realm返回的信息会被使用,以后的Realm将被忽略,如果没有一个验证成功,则该次尝试失败
AllSuccessfulStrategy 所有配置的Realm在全部尝试中都成功验证才被认为是成功,如果有一个验证不成功,则该次尝试失败。

 

Shiro第二章Authentication

原文:https://www.cnblogs.com/keepInsist/p/11672732.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!