面试题答案
一键面试JAAS认证机制基本流程
- LoginContext初始化:应用程序创建
LoginContext
实例,传入一个配置文件名,该文件定义了登录模块(LoginModule
)及其相关配置。 - 调用login方法:
LoginContext
调用login
方法,login
方法会依次调用配置文件中定义的各个LoginModule
的login
方法。 - 认证过程:每个
LoginModule
负责特定的认证逻辑,例如用户名密码验证、证书验证等。如果一个LoginModule
认证成功,会将认证信息保存起来,并返回true
;如果失败则返回false
。 - commit操作:当所有
LoginModule
的login
方法都成功执行后,LoginContext
调用各个LoginModule
的commit
方法。commit
方法负责将认证成功的信息(如身份信息等)关联到Subject
对象上。 - logout操作(可选):应用程序结束时,可以调用
LoginContext
的logout
方法,logout
方法会依次调用各个LoginModule
的logout
方法,清除认证信息。
Principal和Subject的作用
- Principal:表示一个特定的身份,例如用户名、组名或其他标识身份的信息。一个
Subject
可以关联多个Principal
,每个Principal
代表Subject
的一种身份。在认证过程中,LoginModule
通常会创建Principal
对象来标识通过认证的实体。例如,一个用户认证成功后,可能会创建一个包含用户名的Principal
对象。 - Subject:代表一个特定的实体(如用户、服务等),它包含了与该实体相关的认证和授权信息。在认证过程中,
LoginModule
将认证成功的Principal
对象添加到Subject
中,同时还可能添加其他相关信息(如凭据,如密码或证书)。在授权阶段,系统会根据Subject
中包含的Principal
以及相关权限信息来决定Subject
是否有权限执行特定的操作。