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

其次,考虑以编程方式配置它:

  1. 继承javax.security.auth.login.Configurationclass.
  2. 覆盖函数 AppConfigurationEntry[] getAppConfigurationEntry(String name)。在这个函数中,你可以 return 一个 AppConfigurationEntry 对象,代表 config file.

    中的一行
    new AppConfigurationEntry(NTLoginModule.class.getName(),
    AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, new HashMap<>())
    

    使用 name 参数,您可以在 LoginContext 构造函数中响应 name 参数。

  3. 从您的配置 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);