本文共 1281 字,大约阅读时间需要 4 分钟。
身份验证是指用户提供身份信息(如用户名)和凭证(如密码)给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应用,这会清除记忆的用户状态。
记住的Subject不是匿名的,是有一个已知的Principal的。
Remembered的判断
subject.isRemembered() → true
注意事项
Shiro的记住功能仅记住Principals,不会记忆凭证,也不会自动登录。已认证Subject是指在当前会话中,通过Principals和Credentials成功认证的Subject。
subject.isAuthenticated() → true
重要性
isRemembered()
和isAuthenticated()
是互斥的。如果已被记住,则不会已经认证。这篇文章主要介绍了Shiro框架中的基于用户名密码的身份验证流程,简单明了地解释了每一步的含义与操作方法。如果需要更深入的学习,可以进一步探讨不同的认证策略或集成第三方身份验证器。
转载地址:http://oskrz.baihongyu.com/