JAAS:如何加载配置文件?

时间:2018-01-08 17:13:57

标签: java jaas

我正在尝试运行JAAS代码示例。

lc = new LoginContext("JaasSample", new TextCallbackHandler());

要注册配置文件,请尝试以下命令:

java -Djava.security.auth.login.config=jaas.config JaasAcn

得到错误:

  

错误:无法找到或加载主类.security.auth.login.config = jaas.config

     

引起:java.lang.ClassNotFoundException:/ security / auth / login / config = jaas / config

2 个答案:

答案 0 :(得分:0)

显然命令行中存在拼写错误:-Djava之后的空格,因此.security.auth.login.config=jaas.config部分被视为类名(因此也会相应地进行修改)。

答案 1 :(得分:0)

首先写javax而不是java,所以:

java -Djavax.security.auth.login.config=jaas.config JaasAcn

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

  1. 继承javax.security.auth.login.Configuration类。
  2. 覆盖函数AppConfigurationEntry[] getAppConfigurationEntry(String name)。在此函数中,您可以返回AppConfigurationEntry对象,该对象代表config file中的行。

    new AppConfigurationEntry(NTLoginModule.class.getName(),
    AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, new HashMap<>())
    

    使用name参数,您可以回复name构造函数中的LoginContext参数。

  3. 从Configuration类创建对象并将其置于Configuration:

    MyConfiguration config = new MyConfiguration();
    Configuration.setConfiguration(config);
    
  4. 缩短的代码可能如下所示:

    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);