3.3. Subject 和 Principal 类

要授权对资源的访问,应用程序必须首先验证请求的来源。JAAS 框架定义了术语“Subject”来表示请求的来源。Subject 类是 JAAS 里的核心类。Subject 代表单个实体的信息,如某个人或服务。它包含了实体的 principal 、公共凭证和私有凭证。JAAS API 使用现有的 Java 2 java.security.Principal 接口来代表 principal,而它基本上一个类型化名称。
在验证过程中,subject 将用关联的标识符(identiy)或主体(principal)来填充。Subject 可能具有多个主体。例如,某个人可能有名称主体(John Doe)、社会保险号码主体(123-45-6789)以及用户名主体(johnd)),这些都有助于将这个 subject 和其他 subject 区分开来。为了获取和 subject 相关联的主体,你可以使用下列两种方法:
public Set getPrincipals() {...}
public Set getPrincipals(Class c) {...}
getPrincipals() 返回所有包含在主题里的主体。getPrincipals(Class c) 只返回那些作为 c 类或其子类实例的主体。如果这个主题没有匹配的主体则返回空集。
请注意,java.security.acl.Group 接口是 java.security.Principal 的一个子接口,所以主体集里的实例可能代表其他主体或主体组的逻辑分组。