Как заставить weblogic подобрать модуль входа в систему jaas.config из файла ear? - PullRequest
4 голосов
/ 21 марта 2012

У нас есть специальный модуль входа (а на самом деле несколько) для нашего приложения.Недавно мы перешли на Weblogic из OC4J, где мы использовали его для настройки в system-jazn-data.xml.

Наша аутентификация работает правильно, однако, чтобы использовать модуль JAAS, нам нужно настроить параметр запуска java, указывающий на файл jaas.config:

-Djava.security.auth.login.config=/path/to/jaas.config

Файлсодержание:

DatabaseAuthentication {
  uk.co.corelogic.framework.security.auth.module.RDBMSLoginModule optional debug=false;
};

У меня вопрос, есть ли другой способ сделать это?

Проблема в том, что я пытаюсь удалить любые внешние зависимости от уха приложения, чтобы он могбыть развернутым с конфигурацией по умолчанию без необходимости создавать файлы на сервере приложений.

Я посмотрел повсюду, но все инструкции, которые я нашел, говорят об указании внешнего файла.Это ужасно простая конфигурация - можно ли ее где-нибудь поместить в файлы дескриптора развертывания?

Есть и другие вещи, которые мне тоже нужно изменить, но они требуют отдельных вопросов:)

1 Ответ

3 голосов
/ 12 апреля 2013

Хорошо, я потратил некоторое время на это, и думаю, у меня есть достойное решение. Вместо того, чтобы использовать файл 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);
...