我们的应用程序有一个自定义登录模块(实际上有几个)。我们最近从OC4J迁移到了Weblogic,我们曾经在system-jazn-data.xml中配置它。
我们已经使我们的身份验证正常工作,但是,要使用JAAS模块,我们必须配置指向jaas.config文件的java启动参数:
-Djava.security.auth.login.config=/path/to/jaas.config
文件内容:
DatabaseAuthentication {
uk.co.corelogic.framework.security.auth.module.RDBMSLoginModule optional debug=false;
};
我的问题是,还有另一种方法吗?
问题是,我正在尝试从应用程序耳中删除任何外部依赖项,以便可以使用默认配置进行部署,而无需在应用程序服务器上创建文件。
我到处都看了,但是我发现的所有说明都指出要指定一个外部文件。这是一个非常简单的配置 - 它可以放在任何地方的部署描述符文件中吗?
我还需要改变其他一些事情,但它们需要单独提出问题:)
答案 0 :(得分:3)
好的,我花了一些时间看这个,我想我有一个不错的解决方案。您可以创建包含必要信息的配置类,并在创建login.conf
时将其传递给您,而不是使用-Dsecurity.auth.login..
文件和LoginContext
垃圾。这是我上课的一个简单例子:
public class MyAppLoginModuleConfig extends javax.security.auth.login.Configuration {
private static final String APP_NAME = "MyApp";
private static final String LOGIN_MODULE_CLASS = "com.myapp.security.MyLoginModule";
@Override
public AppConfigurationEntry[] getAppConfigurationEntry(String name) {
if (name.equals(APP_NAME)) {
AppConfigurationEntry[] configArr = new AppConfigurationEntry[1];
configArr[0] = new AppConfigurationEntry(
LOGIN_MODULE_CLASS,
AppConfigurationEntry.LoginModuleControlFlag.REQUISITE, // or required, sufficient, etc
new HashMap<String, Object>()); // for any options you have, can't be null
return configArr;
}
// something funky happened and we're trying to look up a different app
throw new RuntimeException("Expected app: " + APP_NAME + ", but got: " + name);
}
}
当您创建登录上下文时,将其传递给:
Subject subject = null;
Configuration myAppConfig = new MyAppLoginModuleConfig();
LoginContext ctx = new LoginContext("MyApp", subject, callbackHandler, myAppConfig);