创建LoginContext时没有配置LoginModules错误(JAAS)

时间:2015-01-23 03:00:45

标签: java osgi kerberos jaas

创建了一个LoginContext对象并传递了一个名称,并使用该条目创建了一个.conf文件。我在代码中设置了系统属性“java.security.auth.login.config”,其中包含conf文件的相对/绝对路径。执行代码时,出现以下错误。

javax.security.auth.login.LoginException:没有为Sample配置LoginModule。

任何线索为什么配置没有被拿起?我错过了什么吗?

感谢任何帮助。

以上代码

System.setProperty("java.security.auth.login.config","sampleConfig.conf");
loginContext = new LoginContext("Sample", new CustomCallbackHandler());
loginContext.login();

sampleConfig.conf

Sample {
   com.sun.security.auth.module.Krb5LoginModule required;
};

该文件似乎没有被拿起。即使我更改了文件名/文件路径/在conf文件中进行了任何语法更改,我仍然只看到上一个错误。

请注意,这是在OSGI包中完成的。

任何帮助?

2 个答案:

答案 0 :(得分:0)

通过sampleConfig.conf获取配置文件org.osgi.framework.Bundle#getResource(String)的具体网址。

将此URL作为值插入System.setProperty("java.security.auth.login.config",<URL>);

如果您的配置文件是OSGi-Framework的一部分,请使用Framework-Bundle(id:0),否则使用包含配置文件的bundle。

修改

可能使用Configuration对象而不是配置文件。

请参阅我的回答:In jaas can we use an object of javax.security.auth.login.Configuration class as an alternative to LoginModule configuration using .config files

public LoginContext(String name,
                    Subject subject,
                    CallbackHandler callbackHandler,
                    Configuration config)
             throws LoginException

答案 1 :(得分:0)

Sample {
  sample.module.SampleLoginModule required debug=true;
};

然后创建您的customCallBackHandler和LoginModule。