public class LoginContext extends Object
的LoginContext
类描述了用于验证对象的基本方法,提供了一种方法来开发独立于底层的认证技术的应用。一个Configuration
指定身份验证技术,或LoginModule
,要使用一个特定的应用程序。不同的loginmodules可以插在一个应用程序无需任何修改应用程序本身。
除了支持可插拔认证,这类还支持堆叠认证的概念。应用程序可以被配置为使用多个登录。例如,可以配置Kerberos登录模块和应用智能卡登录。
一个典型的调用实例化一个logincontext与名称和CallbackHandler
。logincontext采用名称的索引配置确定loginmodules应该被使用,哪些必须成功,为了成功的全面认证。的CallbackHandler
传递给潜在的loginmodules所以他们可以沟通和互动(提示用户输入用户名和密码通过例如图形用户界面)。
一旦对方有一logincontext实例化,它调用login
方法鉴定Subject
,login
方法调用配置模块完成各自的类型认证(用户名/密码、智能卡PIN验证,等)。请注意,loginmodules不会尝试验证重试或引入延迟如果认证失败。此类任务属于logincontext来电。
如果login
方法返回不抛出异常,那么整体的认证成功。调用者可以获取新的认证主体通过调用getSubject
方法。校长和凭据与主题相关的可以通过调用对象的各自的getPrincipals
,检索getPublicCredentials
,和getPrivateCredentials
方法。
登出的话题,对方称logout
方法。与login
方法,这logout
方法调用的配置模块的logout
方法。
一个logincontext不应该用来验证多个主题。一个单独的logincontext应该用来验证每一个不同的主题。
下面的文件适用于所有logincontext构造函数:
Subject
null
主体和null
值是允许的,这logincontext实例化一个新的课题。Configuration
如果构造函数不不有配置输入参数,或者如果调用者指定null
配置对象的构造函数,使用下面的调用得到的安装配置:
配置:配置。getconfiguration();为例,给构造函数的名称参数传递给方法的
Configuration.getAppConfigurationEntry
。如果配置为指定的名称没有条目,然后LoginContext
电话getAppConfigurationEntry
的名字,“其他”(默认条目名称)。如果没有进入“其他”,然后LoginException
抛出。AccessController.doPrivileged
电话使模块进行安全敏感的任务(如连接到远程主机,并更新主题)将需要各自的权限,但在logincontext调用者不需要这些权限。AccessControlContext
,并调用配置的模块在一个AccessController.doPrivileged
呼叫上下文约束。这意味着呼叫者上下文(存储在logincontext创建)必须具有足够的权限来执行模块可以执行任何安全敏感的任务。CallbackHandler
null
callbackhandler对象(和null
值是允许的),logincontext的auth.login.defaultCallbackHandler
安全属性查询的完全限定类名默认处理程序的实现。如果未设置安全属性,那么基础模块将不会有一个用于与用户callbackhandler。因此调用者假定配置模块的替代手段,用于验证用户。handle
方法实现调用在java.security.AccessController.doPrivileged
指定CallbackHandler的handle
调用方法的调用者的当前AccessControlContext
约束任何来电。Constructor and Description |
---|
LoginContext(String name)
实例化一个新的
LoginContext 对象名称。
|
LoginContext(String name, CallbackHandler callbackHandler)
实例化一个新的
LoginContext 对象有一个名字和一个
CallbackHandler 对象。
|
LoginContext(String name, Subject subject)
实例化一个新的
LoginContext 对象有一个名字和一个
Subject 对象。
|
LoginContext(String name, Subject subject, CallbackHandler callbackHandler)
实例化一个新的
LoginContext 对象与一个名字,一个
Subject 被认证,和
CallbackHandler 对象。
|
LoginContext(String name, Subject subject, CallbackHandler callbackHandler, Configuration config)
实例化一个新的
LoginContext 对象与一个名字,一个
Subject 被认证,一个
CallbackHandler 对象,和一个登录
Configuration 。
|
public LoginContext(String name) throws LoginException
LoginContext
对象名称。
name
-作为指标纳入
Configuration
名称。
LoginException
如果调用者指定
name
没有出现在
Configuration
没有
Configuration
条目“其他”,或者auth.login.defaultcallbackhandler安全属性设置,但实现类不能加载。
SecurityException
-如果要设置和调用方没有authpermission(“createlogincontext。名称”),或者名称配置条目不存在,调用者不另外有authpermission(“createlogincontext。”)
public LoginContext(String name, Subject subject) throws LoginException
LoginContext
对象有一个名字和一个
Subject
对象。
name
-作为指标纳入
Configuration
名称。
subject
-
Subject
认证。
LoginException
如果调用者指定
name
没有出现在
Configuration
没有
Configuration
条目“其他”,如果调用者指定
subject
是
null
,或者如果auth.login.defaultcallbackhandler安全属性设置,但实现类不能加载。
SecurityException
-如果要设置和调用方没有authpermission(“createlogincontext。名称”),或者名称配置条目不存在,调用者不另外有authpermission(“createlogincontext。”)
public LoginContext(String name, CallbackHandler callbackHandler) throws LoginException
LoginContext
对象有一个名字和一个
CallbackHandler
对象。
name
-作为指标纳入
Configuration
名称。
callbackHandler
-用loginmodules与用户沟通的
CallbackHandler
对象。
LoginException
如果调用者指定
name
没有出现在
Configuration
没有
Configuration
条目“其他”,或如果调用者指定
callbackHandler
是
null
。
SecurityException
-如果要设置和调用方没有authpermission(“createlogincontext。名称”),或者名称配置条目不存在,调用者不另外有authpermission(“createlogincontext。”)
public LoginContext(String name, Subject subject, CallbackHandler callbackHandler) throws LoginException
LoginContext
对象与一个名字,一个
Subject
被认证,和
CallbackHandler
对象。
name
-作为指标纳入
Configuration
名称。
subject
-
Subject
认证。
callbackHandler
-用loginmodules与用户沟通的
CallbackHandler
对象。
LoginException
如果调用者指定
name
没有出现在
Configuration
没有
Configuration
条目“其他”,或如果调用者指定
subject
是
null
,或如果调用者指定
callbackHandler
是
null
。
SecurityException
-如果要设置和调用方没有authpermission(“createlogincontext。名称”),或者名称配置条目不存在,调用者不另外有authpermission(“createlogincontext。”)
public LoginContext(String name, Subject subject, CallbackHandler callbackHandler, Configuration config) throws LoginException
LoginContext
对象与一个名字,一个
Subject
被认证,一个
CallbackHandler
对象,和一个登录
Configuration
。
name
-作为指标纳入
Configuration
调用者指定名称。
subject
-
Subject
认证,或
null
。
callbackHandler
-用loginmodules与用户沟通的
CallbackHandler
对象,或
null
。
config
-
Configuration
列出登录模块被称为执行认证,或
null
。
LoginException
如果调用者指定
name
没有出现在
Configuration
没有
Configuration
条目“其他”。
SecurityException
-如果要设置,配置是
null
,或者对方没有authpermission(“createlogincontext。名称”),或者名称配置条目不存在,调用者不另外有authpermission(“createlogincontext。”)
public void login() throws LoginException
此方法调用每个登录模块配置为指定的LoginContext
构造函数的名称的login
方法,通过登录Configuration
确定。每个LoginModule
然后执行其各自的身份验证的类型(用户名/密码、智能卡PIN验证,等)。
这种方法如果整体认证成功调用每个配置登录的commit
方法完成两相的认证过程(相关要求,必要的,足够的,和可选的loginmodules成功),或者如果整体认证失败调用每个配置abort
登录的方法。如果认证成功,每个成功的LoginModule的commit
方法将有关校长和凭据的Subject
。如果验证失败,每个登录的abort
方法移除/破坏任何以前存储的状态。
如果认证过程的commit
阶段失败,那么整体的验证失败,此方法调用的方法为每个配置LoginModule
abort
。
如果abort
相没有以任何理由,那么这种方法传播原始异常的login
阶段或commit
期。在任何一种情况下,整体身份验证失败。
在多loginmodules失败的情况下,这种方法在第一LoginModule
失败引发的异常。
注意,如果这种方法进入abort
相(或login
或commit
相失败),该方法调用所有loginmodules配置应用程序无论各自的Configuration
标志参数。基本上这意味着Requisite
和Sufficient
语义的abort
阶段忽视。这保证了适当的清理和状态恢复可以发生。
LoginException
如果认证失败。
public void logout() throws LoginException
Subject
。
此方法调用的每个LoginModule
配置这LoginContext
的logout
方法。每个LoginModule
执行其各自的注销程序,其中可能包括清除/破坏Principal
和Credential
信息从Subject
和国家清理。
请注意,此方法调用都loginmodules配置的应用无论各自的Configuration
标志参数。基本上这意味着Requisite
和Sufficient
语义是本方法的忽视。这保证了适当的清理和状态恢复可以发生。
LoginException
如果注销失败。
public Subject getSubject()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.