Subject——指当前操作者,可以是人(用户)、第三方程序以及其他任何任何与我们应用程序交互的人或事物。
Principals——是Subject的标示属性,如用户名、社会安全码(如中国的身份证号)
Credentials——用于验证身份的秘密数据,如密码、生物特征识别数据(如指纹等)、x509证书等。
Realms——用于访问后 端数据源的特定安全DAO、数据访问对象、软件组件等。例如如果我们使用LDAP存储用户名秘密,那么我们需要有一个与LDAP交互的LDAP Realm。故而,针对每一个后端数据源我们都需要一个Realm,并且Shiro也能够协调这些Realm来做我们需要做的事情。
在java应用中使用shiro来进行认证可以分为三个步骤。
1.收集subject的principals和credentials
2.提交principals和credentials到认证系统
3.认证后或允许访问、或尝试再次认证、或阻止访问。
提到第一步收集principals和credentials,此处我们需要认识一个简单的支持多数认证机制的用户名/密码认证令牌(token)——UsernamePasswordToken。我们用它来绑定应用程序中已获取的用户名和密码。那如何获取用户名和密码呢?Shiro本身是不关系获取方 式的(与协议无关性),我们可以通过form 提交、http header或者命令行等方式传入java程序中。使用方式如下所示。
UsernamePasswordToken token =
new UsernamePasswordToken( username, password );
Subject currentUser = SecurityUtils.getSubject();
currentUser.login(token);
try {
currentUser.login(token);
} catch ( UnknownAccountException uae ) { ...
} catch ( IncorrectCredentialsException ice ) { ...
} catch ( LockedAccountException lae ) { ...
} catch ( ExcessiveAttemptsException eae ) { ...
} ... catch your own ...
} catch ( AuthenticationException ae ) {
//unexpected error?
}
原文地址:http://blog.csdn.net/shierqu/article/details/43318899