Subject:在我们的教程中已经提到,Subject 实质上是一个当前执行用户的特定的安全“视图”。鉴于"User"
一词通常意味着一个人,而一个Subject 可以是一个人,但它还可以代表第三方服务,daemon account,cron job,
或其他类似的任何东西——基本上是当前正与软件进行交互的任何东西。
所有Subject 实例都被绑定到(且这是必须的)一个SecurityManager 上。当你与一个Subject 交互时,那些交
互作用转化为与SecurityManager 交互的特定subject 的交互作用。
SecurityManager:SecurityManager 是Shiro 架构的心脏,并作为一种“保护伞”对象来协调内部的安全组件
共同构成一个对象图。然而,一旦SecurityManager 和它的内置对象图已经配置给一个应用程序,那么它单独
留下来,且应用程序开发人员几乎使用他们所有的时间来处理Subject API。
我们稍后会更详细地讨论SecurityManager,但重要的是要认识到,当你正与一个Subject 进行交互时,实质上
是幕后的SecurityManager 处理所有繁重的Subject 安全操作
Realms:Realms 担当Shiro 和你的应用程序的安全数据之间的“桥梁”或“连接器”。当它实际上与安全相
关的数据如用来执行身份验证(登录)及授权(访问控制)的用户帐户交互时,Shiro 从一个或多个为应用程
序配置的Realm 中寻找许多这样的东西。
在这个意义上说,Realm 本质上是一个特定安全的DAO:它封装了数据源的连接详细信息,使Shiro 所需的相
关的数据可用。当配置Shiro 时,你必须指定至少一个Realm 用来进行身份验证和/或授权。SecurityManager
可能配置多个Realms,但至少有一个是必须的。
Principals(身份)是Subject 的‘identifying attributes(标识属性)’。Principals(身份)可以是任何能够证明
Subject 的东西,如名,姓氏,用户名,社会保险号(相当于我们的身份证号码)等等。当然像姓氏这样的
用来标识Subject 并不是很好,因此,最好的用来进行身份验证的Principals(身份)是对应用程序来说应
该是独一无二的——通常是用户名或电子邮件地址。
Credentials(凭证)通常是只被Subject 知道的秘密值,它用来作为一种起支持作用的证据,此证据事实上
包含着所谓的身份证明。一些常见credentials(凭证)的例子有密码,生物特征数据如指纹和视网膜扫描,
以及X.509 证书。