public abstract class Configuration extends Object
登录配置包含以下信息。 注意,这个例子仅仅代表了默认的语法Configuration
。 该类的子类实现可以实现替代语法,并且可以从诸如文件,数据库或服务器的任何来源检索Configuration
。
Name {
ModuleClass Flag ModuleOptions;
ModuleClass Flag ModuleOptions;
ModuleClass Flag ModuleOptions;
};
Name {
ModuleClass Flag ModuleOptions;
ModuleClass Flag ModuleOptions;
};
other {
ModuleClass Flag ModuleOptions;
ModuleClass Flag ModuleOptions;
};
Configuration
中的每个条目都通过应用程序名称Name进行索引,并包含为该应用程序配置的LoginModule列表。 每个LoginModule
通过其完全限定的类名来指定。 验证按指定的确切顺序向下移动模块列表。 如果应用程序没有特定的条目,则默认为“ 其他 ”的特定条目。
标识值控制整体行为,因为认证向下移动堆栈。 下面代表对Flag及其各自语义的有效值的描述:
1) Required - The LoginModule
is required to succeed.
If it succeeds or fails, authentication still continues
to proceed down the LoginModule
list.
2) Requisite - The LoginModule
is required to succeed.
If it succeeds, authentication continues down the
LoginModule
list. If it fails,
control immediately returns to the application
(authentication does not proceed down the
LoginModule
list).
3) Sufficient - The LoginModule
is not required to
succeed. If it does succeed, control immediately
returns to the application (authentication does not
proceed down the LoginModule
list).
If it fails, authentication continues down the
LoginModule
list.
4) Optional - The LoginModule
is not required to
succeed. If it succeeds or fails,
authentication still continues to proceed down the
LoginModule
list.
整体认证成功只有当所有必需的和必要的 LoginModules成功。 假如有足够 LoginModule
配置和成功,那么只有必需的和之前有足够的必需的LoginModules LoginModule
需要有成功的,整个身份验证成功。 如果没有必需或必不可少的LoginModules被配置为一个应用程序,那么至少有一个充分的或可选 LoginModule
必须成功。
ModuleOptions是LoginModule
特定值的空格分隔列表,它们直接传递到底层的LoginModules。 选项由LoginModule
本身定义,并控制其中的行为。 例如, LoginModule
可以定义支持调试/测试功能的选项。 在Configuration
中指定选项的正确方法是使用以下键值配对: debug =“true” 。 键和值应该用“equals”符号分隔,该值应该用双引号括起来。 如果一个字符串的形式$ {system.property}出现在该值中,它将被扩展为系统属性的值。 请注意, LoginModule
可能定义的选项数量没有限制。
以下代表一个基于上述语法的示例Configuration
条目:
Login {
com.sun.security.auth.module.UnixLoginModule required;
com.sun.security.auth.module.Krb5LoginModule optional
useTicketCache="true"
ticketCache="${user.home}${/}tickets";
};
此Configuration
指定名为“登录”的应用程序要求用户首先对com.sun.security.auth.module.UnixLoginModule进行身份验证 ,这是成功所必需的。 即使UnixLoginModule身份验证失败,仍可以调用com.sun.security.auth.module.Krb5LoginModule 。 这有助于隐藏失败的根源。 由于Krb5LoginModule是可选的 ,因此只有在UnixLoginModule ( 必需 )成功时才可以进行整体验证。
还要注意的是,LoginModule特定的选项, useTicketCache =“true”和ticketCache = $ {user.home} $ {/}票据“被传递给Krb5LoginModule ,这些选项指示Krb5LoginModule在指定的位置使用票证缓存该系统属性user.home和/(文件分割符),被扩展为它们各自的值。
在任何给定时间,运行时只安装一个Configuration对象。 可以通过调用setConfiguration
方法来安装配置对象。 可以通过调用getConfiguration
方法获得已安装的配置对象。
如果运行时中没有安装配置对象,则调用getConfiguration
将安装默认配置实现(该抽象类的默认子类实现)的实例。 可以通过将login.configuration.provider
安全属性的值设置为所需配置子类实现的完全限定名称来更改默认配置实现。
应用程序代码可以直接子类化以提供自定义的实现。 另外,可以通过使用标准类型调用getInstance
工厂方法之一来构造一个Configuration对象的实例。 默认策略类型为“JavaLoginConfig”。 看到配置部分Java Cryptography Architecture Standard Algorithm Name Documentation标准配置类型的列表。
LoginContext
, security properties
Modifier and Type | Class and Description |
---|---|
static interface |
Configuration.Parameters
这表示配置参数的标记界面。
|
Modifier | Constructor and Description |
---|---|
protected |
Configuration()
唯一的构造函数。
|
Modifier and Type | Method and Description |
---|---|
abstract AppConfigurationEntry[] |
getAppConfigurationEntry(String name)
从此配置中检索指定
名称的AppConfigurationEntries。
|
static Configuration |
getConfiguration()
获取安装的登录配置。
|
static Configuration |
getInstance(String type, Configuration.Parameters params)
返回指定类型的Configuration对象。
|
static Configuration |
getInstance(String type, Configuration.Parameters params, Provider provider)
返回指定类型的Configuration对象。
|
static Configuration |
getInstance(String type, Configuration.Parameters params, String provider)
返回指定类型的Configuration对象。
|
Configuration.Parameters |
getParameters()
返回配置参数。
|
Provider |
getProvider()
返回此配置的提供程序。
|
String |
getType()
返回此配置的类型。
|
void |
refresh()
刷新并重新加载配置。
|
static void |
setConfiguration(Configuration configuration)
设置登录
Configuration 。
|
public static Configuration getConfiguration()
Configuration.setConfiguration
方法设置了配置对象,则返回该对象。
否则返回一个默认的配置对象。
SecurityException
- 如果主叫方没有获取配置的权限。
setConfiguration(javax.security.auth.login.Configuration)
public static void setConfiguration(Configuration configuration)
Configuration
。
configuration
- 新的
Configuration
SecurityException
- 如果当前线程没有权限设置
Configuration
。
getConfiguration()
public static Configuration getInstance(String type, Configuration.Parameters params) throws NoSuchAlgorithmException
此方法遍历已注册的安全提供程序列表,从最为首选的提供程序开始。 返回从支持指定类型的第一个Provider中封装ConfigurationSpi实现的新配置对象。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
type
- 指定的配置类型。
看到配置部分Java Cryptography Architecture Standard Algorithm Name Documentation标准配置类型的列表。
params
- 配置的参数,可以为空。
SecurityException
- 如果调用者没有获取指定类型的配置实例的权限。
NullPointerException
- 如果指定的类型为空。
IllegalArgumentException
- 如果指定的参数不被所选提供者的ConfigurationSpi实现所理解。
NoSuchAlgorithmException
- 如果没有提供程序支持指定类型的ConfigurationSpi实现。
Provider
public static Configuration getInstance(String type, Configuration.Parameters params, String provider) throws NoSuchProviderException, NoSuchAlgorithmException
返回从指定提供程序封装ConfigurationSpi实现的新配置对象。 指定的提供者必须在提供者列表中注册。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
type
- 指定的配置类型。
看到配置部分Java Cryptography Architecture Standard Algorithm Name Documentation标准配置类型的列表。
params
- 配置的参数,可能为null。
provider
- 提供商。
SecurityException
- 如果调用者没有获取指定类型的配置实例的权限。
NullPointerException
- 如果指定的类型为空。
IllegalArgumentException
- 如果指定的提供程序为空或为空,或指定的参数不被指定提供程序的ConfigurationSpi实现所理解。
NoSuchProviderException
- 如果指定的提供程序未在安全提供程序列表中注册。
NoSuchAlgorithmException
- 如果指定的提供程序不支持指定类型的ConfigurationSpi实现。
Provider
public static Configuration getInstance(String type, Configuration.Parameters params, Provider provider) throws NoSuchAlgorithmException
返回从指定的Provider对象封装ConfigurationSpi实现的新配置对象。 请注意,指定的Provider对象不必在提供者列表中注册。
type
- 指定的配置类型。
看到配置部分Java Cryptography Architecture Standard Algorithm Name Documentation标准配置类型的列表。
params
- 配置的参数,可以为null。
provider
- 提供商。
SecurityException
- 如果调用者没有获取指定类型的配置实例的权限。
NullPointerException
- 如果指定的类型为空。
IllegalArgumentException
- 如果指定的提供程序为空,或指定的参数不被指定的Provider中的ConfigurationSpi实现所理解。
NoSuchAlgorithmException
- 如果指定的提供程序不支持指定类型的ConfigurationSpi实现。
Provider
public Provider getProvider()
如果通过调用Configuration.getInstance
获取该配置实例,则该配置实例将只有一个Provider。 否则,此方法返回null。
public String getType()
此配置实例只有通过调用Configuration.getInstance
获取的类型。 否则,此方法返回null。
public Configuration.Parameters getParameters()
该配置实例只有通过调用Configuration.getInstance
获得Configuration.getInstance
。 否则,此方法返回null。
public abstract AppConfigurationEntry[] getAppConfigurationEntry(String name)
name
- 用于索引配置的名称。
public void refresh()
此方法使此Configuration对象以实现相关的方式刷新/重新加载其内容。 例如,如果此配置对象将其条目存储在文件中,则调用refresh
可能会导致重新读取该文件。
这种方法的默认实现什么都不做。 如果实现支持刷新操作,则该方法应该被覆盖。
SecurityException
- 如果呼叫者没有刷新其配置的权限。