Необходимые настройки и код доступа клиента.
Прежде чем мы продолжим настройку контроля доступа на сервере, я хотел бы рассказать и показать ЧТО и КАК делается на стороне клиента (например GUI), для того чтобы выполнялась идентификация и авторизация, используя возможности JAAS.
Вот часть кода, который у меня используется для идентификации и авторизации клиента в JUnit тесте:
Hashtable props = new Hashtable(); props.put(Context.INITIAL_CONTEXT_FACTORY, "localhost:1099"); props.put(Context.PROVIDER_URL, "org.jnp.interfaces.NamingContextFactory"); props.put(Context.URL_PKG_PREFIXES, "
org.jboss.naming"); try { context = new InitialContext(props); // поиск бина с именем "MyEntityBean" Object ref = context.lookup("MyEntityBean"); home = (MyEntityBeanHome)
PortableRemoteObject.narrow( ref, MyEntityBeanHome.class); // имя пользователя и пароль доступа к серверу String userName = "test"; String password = "testpass"; // установка свойства, для указания файла
конфигурации // JAAS логин-модуля на клиентском приложении System.setProperty( "java.security.auth.login.config", "X:/.../jboss/client/auth.conf");
// используемый обработчик, которому передаются
вводимые имя и пароль org.jboss.security.auth.callback.
UsernamePasswordHandler handler = new org.jboss.security.auth.callback.
UsernamePasswordHandler( userName, password.toCharArray());
// создание логин-контекста на клиенте final javax.security.auth.login.LoginContext lc = new javax.security.auth.login.LoginContext
("simple", handler);
// логин в систему lc.login();
} catch (javax.security.auth.login.
LoginException e) { System.out.println("Login
Exception: " + e); e.printStackTrace(); } catch (NamingException e) { System.out.println("Naming
Exception: " + e); e.printStackTrace(); }
Интересной частью, является содержимое файла - auth.conf., который используется клиентом и должен поставляться вместе с клиентским приложением. А также название клиентского логин-модуля - "simple".
Файл auth.conf создан по образцу имеющегося в JBoss файла, только упрощен. Не вдаваясь в подробности, стоит сказать, что необходимо "точное" соблюдение формата данного файла, с учетом всех символов-разделителей (;).
Содержимое файла - auth.conf
simple { org.jboss.security.ClientLoginModule
required; };
Клиент использует файл конфигурации с указанным классом (org.jboss.security.ClientLoginModule) , который реализован как JAAS логин-модуль. Данный класс просто "делегирует", передает вводимые пользователем "имя и пароль" на сервер.
На этом можно закончить настройку клиента и его кода. Этого достаточно для работы клиента, хотя возможны варианты использования других классов "клиентского" логин-модуля. Для использования на клиентской стороне существует еще один класс для логин-модуля - SRPLoginModule, но мне не удалось его настроить.