Shiro 的身份认证
发布日期:2021-05-24 06:08:11 浏览次数:10 分类:精选文章

本文共 1281 字,大约阅读时间需要 4 分钟。

身份验证与Shiro框овор

身份验证是指用户提供身份信息(如用户名)和凭证(如密码)给Shiro框架进行认证,确认其与应用预期一致。以下是相关知识与操作步骤。

基本概念

  • Principals(身份)

    通常是登录时提交的用户名,表示用户的身份信息。例如,登录时输入的用户名属于Principals。

  • Credentials(凭证)

    通常是Subject自己知道的密码。例如,登录时输入的密码属于Credentials。

  • UsernamePasswordToken

    用于支持基于用户名和密码的身份验证。如果需要记住用户的身份,可以通过将token设为记住的方式实现。不过需要注意的是,Shiro的记住功能不会记住凭证,也就不会自动登录。

身份验证步骤

  • 收集Subject提交的Principals和Credentials,生成token。

    UsernamePasswordToken token = new UsernamePasswordToken(username, password);token.setRememberMe(true);
  • 提交Principals和Credentials进行身份验证。

    Subject currentUser = SecurityUtils.getSubject();currentUser.login(token);
  • 处理认证结果。

    try {    currentUser.login(token);} catch (AuthenticationException e) {    // 用户名或密码错误    e.printStackTrace();} catch (IncorrectCredentialsException e) {    // 密码错误} catch (LockedAccountException e) {    // 账户锁定}
  • 注销操作

    调用currentUser.logout()后,Subject会变成匿名状态,之前的会话将失效。对于基于Cookies的Web应用,这会清除记忆的用户状态。

    Remembered(记住我)

    • 记住的Subject不是匿名的,是有一个已知的Principal的。

    • Remembered的判断

      subject.isRemembered() → true
    • 注意事项

      Shiro的记住功能仅记住Principals,不会记忆凭证,也不会自动登录。

    Authenticated(已认证)

    • 已认证Subject是指在当前会话中,通过Principals和Credentials成功认证的Subject。

      subject.isAuthenticated() → true
    • 重要性

      isRemembered()isAuthenticated()是互斥的。如果已被记住,则不会已经认证。

    这篇文章主要介绍了Shiro框架中的基于用户名密码的身份验证流程,简单明了地解释了每一步的含义与操作方法。如果需要更深入的学习,可以进一步探讨不同的认证策略或集成第三方身份验证器。

    上一篇:Shiro 的身份认证-Realm
    下一篇:Shiro 的Permissions

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年04月24日 02时29分18秒