Authentication(身份验证)就是验证身份的过程,即在应用程序中验证他们到底存不存在。为了验证他们的身份,他们需要提供一些让应用程序信任的标识信息。
在Shiro中,用户必须提供principals(身份)和credentials(凭证)给Shiro,让应用程序验证用户身份。
- Principals是一个主体的标识属性,它可以是任何东西,比如用户名、邮箱和手机等唯一标识。虽然Subject可以有任意数量principals,但是必须有一个主要principals。
- Credentials是主体才知道秘密值。
它们最常见的例子就是用户名/密码的组合。
验证Subject
我们在Shiro的介绍(一)已经诉述过,验证Subject一般分为三步,我们来详解这三步。
Step1:收集Subject的身份和凭证
// 收集用户名/密码
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
// 设置”Remember Me”
token.setRememberMe(true);
如你所见,“UsernamePasswordToken”类支持最常见的用户名/密码身份验证方式,这个类实现了Shiro的“org.apache.shiro.authc.AuthenticationToken”接口,而这个接口用于Shiro验证系统验证提交的身份和凭证。
Step2:提交身份和凭证
// 获取Subject
Subject currentUser = SecurityUtils.getSubject();
// 登录(提交身份和凭证)
currentUser.login(token);
如你所见,获取Subject当前运行实例,提交UsernamePasswordToken实例,执行登录操作。
Step3:处理成功或失败
try {
currentUser.login(token);
} catch ( U