JAAS:如何加载配置文件?
JAAS: How to load config file?
我正在尝试 运行 JAAS 代码示例。
lc = new LoginContext("JaasSample", new TextCallbackHandler());
要注册配置文件,我尝试使用命令:
java -Djava.security.auth.login.config=jaas.config JaasAcn
并得到错误:
Error: Could not find or load main class .security.auth.login.config=jaas.config
Caused by: java.lang.ClassNotFoundException: /security/auth/login/config=jaas/config
显然在命令行中有一个拼写错误:-Djava
之后的 space,因此 .security.auth.login.config=jaas.config
部分被视为 class 名称(因此也相应地损坏了)。
首先写javax
而不是java
,所以:
java -Djavax.security.auth.login.config=jaas.config JaasAcn
其次,考虑以编程方式配置它:
- 继承
javax.security.auth.login.Configuration
class.
覆盖函数 AppConfigurationEntry[] getAppConfigurationEntry(String name)
。在这个函数中,你可以 return 一个 AppConfigurationEntry
对象,代表 config file.
中的一行
new AppConfigurationEntry(NTLoginModule.class.getName(),
AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, new HashMap<>())
使用 name
参数,您可以在 LoginContext
构造函数中响应 name
参数。
从您的配置 class 创建对象并将其放入配置中:
MyConfiguration config = new MyConfiguration();
Configuration.setConfiguration(config);
缩短的代码如下所示:
Configuration config = new Configuration() {
@Override
public AppConfigurationEntry[] getAppConfigurationEntry(String name) {
return new AppConfigurationEntry[]{
new AppConfigurationEntry(NTLoginModule.class.getName(),
AppConfigurationEntry.LoginModuleControlFlag.REQUIRED,
new HashMap<>())
};
}
};
Configuration.setConfiguration(config);
我正在尝试 运行 JAAS 代码示例。
lc = new LoginContext("JaasSample", new TextCallbackHandler());
要注册配置文件,我尝试使用命令:
java -Djava.security.auth.login.config=jaas.config JaasAcn
并得到错误:
Error: Could not find or load main class .security.auth.login.config=jaas.config
Caused by: java.lang.ClassNotFoundException: /security/auth/login/config=jaas/config
显然在命令行中有一个拼写错误:-Djava
之后的 space,因此 .security.auth.login.config=jaas.config
部分被视为 class 名称(因此也相应地损坏了)。
首先写javax
而不是java
,所以:
java -Djavax.security.auth.login.config=jaas.config JaasAcn
其次,考虑以编程方式配置它:
- 继承
javax.security.auth.login.Configuration
class. 覆盖函数
中的一行AppConfigurationEntry[] getAppConfigurationEntry(String name)
。在这个函数中,你可以 return 一个AppConfigurationEntry
对象,代表 config file.new AppConfigurationEntry(NTLoginModule.class.getName(), AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, new HashMap<>())
使用
name
参数,您可以在LoginContext
构造函数中响应name
参数。从您的配置 class 创建对象并将其放入配置中:
MyConfiguration config = new MyConfiguration(); Configuration.setConfiguration(config);
缩短的代码如下所示:
Configuration config = new Configuration() {
@Override
public AppConfigurationEntry[] getAppConfigurationEntry(String name) {
return new AppConfigurationEntry[]{
new AppConfigurationEntry(NTLoginModule.class.getName(),
AppConfigurationEntry.LoginModuleControlFlag.REQUIRED,
new HashMap<>())
};
}
};
Configuration.setConfiguration(config);