如何让weblogic从内耳文件中获取登录模块jaas.config?

时间:2012-03-21 18:26:17

标签: java-ee weblogic

我们的应用程序有一个自定义登录模块(实际上有几个)。我们最近从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;
};

我的问题是,还有另一种方法吗?

问题是,我正在尝试从应用程序耳中删除任何外部依赖项,以便可以使用默认配置进行部署,而无需在应用程序服务器上创建文件。

我到处都看了,但是我发现的所有说明都指出要指定一个外部文件。这是一个非常简单的配置 - 它可以放在任何地方的部署描述符文件中吗?

我还需要改变其他一些事情,但它们需要单独提出问题:)

1 个答案:

答案 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);
相关问题