автономное приложение rcp, доступ к защищенным EJB, стеклянная рыба

Я хочу получить безопасный доступ к EJB. Я разрабатываю приложение eclipse rcp и хочу подключиться к серверу glassfish 3.1.1, на котором защищены некоторые EJB, и я хочу подключиться к этим EJB, используя Java EE 6 security

Я нашел что-то вроде этого:

ProgrammaticLogin pm = new ProgrammaticLogin();
pm.login(usernameText.getText(), passwordText.getText());

Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
// optional. Defaults to localhost. Only needed if web server is running on a different host than the appserver
props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
// optional. Defaults to 3700. Only needed if target orb port is not 3700.
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");

try
{
    Context ctx = new InitialContext(props);
}
catch (NamingException e)
{
    e.printStackTrace();
}

Я включил все jar из GlassFish appclient.jar glassfish3/glassfish/bin/package-appclient

Примеры ошибок:

SEVERE: SEC9050: Programmatic login failed
com.sun.enterprise.security.auth.login.common.LoginException:  javax.security.auth.login.LoginException: No LoginModules configured for default
at com.sun.enterprise.security.auth.login.LoginContextDriver$9.run(LoginContextDriver.java:889)
...

Знаете ли вы, как безопасно войти в EJBs любым способом для настольного приложения?

Мои ссылки:

  1. Учебник по Java EE 6 — безопасность
  2. Советы по Java: доступ к защищенному EJB из клиента

Если вы знаете ответ... не могли бы вы привести примеры?

Заранее спасибо!


person Alex    schedule 23.02.2012    source источник
comment
Я знаю, что он старый, но ваша проблема в том, что код ищет значение по умолчанию в файле login.conf. Здесь может быть указано много, если вы не укажете, код попытается найти запись по умолчанию, что-то вроде следующего. deafult { com.sun.enterprise.security.auth.login.FileLoginModule required; }; Но в вашей конфигурации нет этой записи, которая будет использоваться для аутентификации пользователя. В автономном режиме вам также необходимо добавить System.setProperty("java.security.auth.login.config", authFile);, чтобы помочь вашему коду найти файл конфигурации.   -  person PHP Avenger    schedule 06.07.2014


Ответы (2)


Вы можете попробовать сделать вызов pm.login после инициализации контекста.

Я знаю, что этот вопрос старый, но я наткнулся на него, столкнувшись с той же ошибкой, и был бы признателен за решение.

У меня был код, сопоставимый со следующим:

ProgrammaticLogin pm = new ProgrammaticLogin();
pm.login(username, pass, "file", true);
container = EJBContainer.createEJBContainer(properties);

Просто переупорядочив его, как показано ниже, проблема решена:

container = EJBContainer.createEJBContainer(properties);
ProgrammaticLogin pm = new ProgrammaticLogin();
pm.login(username, pass, "file", true);

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

person Jonathan Dautrich    schedule 21.11.2012
comment
Привет Джонатат. Спасибо! Я попробую это. Я принял ваш ответ, потому что я думаю, что это то, чего мне не хватало .. это имеет смысл :) Я пробовал это давным-давно: P спасибо - person Alex; 21.11.2012

Похоже, что в вашем клиентском приложении отсутствуют некоторые зависимые банки.

Похоже, что класс, который вам не хватает, находится в: appserv-rt.jar

Теперь этот jar нельзя распространять вместе с Eclipse. Проверили, есть ли клиентская библиотека Glassfish?

person Mark Robinson    schedule 24.02.2012
comment
Я так и сделал, но gf client.jar не подходит для программного входа в систему ... Я знаю, что мне не хватает jar-файлов .. Но вы знаете, что все jar-файлы нужны отдельному приложению? - person Alex; 24.02.2012
comment
хорошо.. appserv-rt.jar не проблема.. Я включил все jar-файлы, но все еще не могу подключиться к EJBs, используя Java EE 6 security - person Alex; 24.02.2012