Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/26: Рейтинг темы: голосов - 26, средняя оценка - 4.88
66 / 0 / 1
Регистрация: 14.10.2012
Сообщений: 3

JAAS JBOSS 7 Авторизация и аутентификация толстого клиента

14.10.2012, 01:17. Показов 5256. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Появилась такая задача.
Есть толстый клиент и JBOSS AS 7.
Необходимо логинить пользователей через толстый клиент.

Кто знает где можно почитать новичку в этом вопросе о том, как это делать правильно с участием JBOSS 7. Нужна доступная детальная дока. Или хотя бы последовательный список источников после прочтения которых все становится понятно. И если можно, вкратце обрисовать, как эти механизмы работают, какой уровень безопасности они предоставляют.

Большое спасибо!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2012, 01:17
Ответы с готовыми решениями:

JAAS + Struts + JBoss
Как оформить JAAS авторизацию в приложении со Struts 1.1?

JAAS аутентификация на LDAP
Здравствуйте. Дело в том, что у меня есть приложение, которое я хочу авторизовать через сервис LDAP. Авторизация будет происходить по...

Технологии и паттерны для толстого клиента на JS
Просьба всем отписаться и сообщить своё мнение по этому поводу. В идеале - ещё сопроводить ссылкой на статью, которая описывает этот вопрос...

3
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
14.10.2012, 02:13
вкратце так http://www.coderanch.com/t/881... S-Tutorial

длиннее тут http://devbank.wordpress.com/2... ial-part1/

самое длинное http://www.oracle.com/technetw... 89689.html
2
66 / 0 / 1
Регистрация: 14.10.2012
Сообщений: 3
14.10.2012, 03:54  [ТС]
Спасибо за ссылки. Начинаю вникать.. По факту отпишусь.
0
66 / 0 / 1
Регистрация: 14.10.2012
Сообщений: 3
19.10.2012, 19:47  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

Вот что удалось накопать.

Аутентификаци на основе JAAS лучше всего расписана вот тут:
http://www.javaranch.com/journ... 804.jsp#a6

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

Подразумевается, что хотя бы поверхностно с JBOSS 7 и EJB 3 знакомы.

В standalone.xml

1. добавляем Realm, в раздел <management>
<security-realms> по аналогии с ApplicationRealm:

XML
1
2
3
4
5
            <security-realm name="MyRealm">
                <authentication>
                    <jaas name="ejb-security-domain"/>
                </authentication>
            </security-realm>
2. В разделе <subsystem xmlns="urn:jboss:domain:security:1.1"> <security-domains>
добавляем новый security domain:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
                <security-domain name="ejb-security-domain" cache-type="default">
                    <authentication>
                        <login-module code="Remoting" flag="optional">
                            <module-option name="password-stacking" value="useFirstPass"/>
                        </login-module>
                        <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag="required">
                            <module-option name="defaultUsersProperties" value="${jboss.server.config.dir}/my-users.properties"/>
                            <module-option name="defaultRolesProperties" value="${jboss.server.config.dir}/my-roles.properties"/>
                            <module-option name="usersProperties" value="${jboss.server.config.dir}/my-users.properties"/>
                            <module-option name="rolesProperties" value="${jboss.server.config.dir}/my-roles.properties"/>
                            <module-option name="password-stacking" value="useFirstPass"/>
                        </login-module>
                    </authentication>
                </security-domain>
3. В разделе
XML
1
2
3
4
  <subsystem xmlns="urn:jboss:domain:remoting:1.1">
            меняем security realm на наш новый реалм:
         <connector name="remoting-connector" socket-binding="remoting" security-realm="MyRealm"/>
</subsystem>
Создаем файлы с пользователями и ролями, на которые будет опираться Логин модуль из рункта 2:
my-users.properties
my-roles.properties

Несмотря на то что в файле для создания пользователей для applicationRealm указано, что пароль должен быть хеш функцией с участием realm, так это не работает с другим реалмом. Да и не нужно.
Надо просто указать пароль без всякого хеширования
# The format of this realm is as follows: -
# username=HEX( MD5( username ':' realm ':' password))

пример (для my-users.properties):
userAlex=pass1234

пример (для my-roles.properties)
userAlex=admin,superuser,
(роли указываются через запятую, без каких либо пробелов и в конце тоже запятая!)

С настройками сервера все.

Серверная часть, EJB
В EJB никаких xml не надо (не обязательно, делаем все по-современному, через аннотации):
Тут легче объяснить на примере.

Пример.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@org.jboss.ejb3.annotation.SecurityDomain("ejb-security-domain")
@Stateless
public class ServerInfo implements ServerInfoRemote, Serializable {
 
    private static final long serialVersionUID = 1L;
    
    @Resource
    SessionContext session;
    
    @javax.annotation.security.RolesAllowed("uperuser")
    @Override
    public String getServerInfo() {
        Principal p = session.getCallerPrincipal();
        
        String s = "Server works. User/Executor/Principal = " + p.getName();
        
        return s;
    }
}
Так как вызов удаленный, то естественно, принимаемые и возвращаемые параметры должны быть сериализуемыми, и сам бин всеже тоже.

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

Авторизация:
Контроль за выполнением проходит двумя способами.
1) Во-первых, к этому бину имеет право получить доступ только пользователь из security domain "ejb-security-domain", это обеспечивается аннотацией
SecurityDomain("ejb-security-domain") перед именем класса.
2) Метод getServerInfo() могут выполнять только пользователи, у которых есть роль (право) "uperuser".

Клиетская часть.

Так мы получаем InitialContext для удаленного доступа к нашим бинам (бину).

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static Context getInitialContext() throws javax.naming.NamingException {
String userName = "userAlex";
String userPass = "pass1234";
 
 
        Properties props = new Properties();
        props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
        props.put(Context.PROVIDER_URL, "remote://localhost:4447");
        props.put(Context.SECURITY_PRINCIPAL,  userName);
        props.put(Context.SECURITY_CREDENTIALS, userPass);
        props.put("jboss.naming.client.remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED","false");
        props.put("jboss.naming.client.ejb.context", true);
        props.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");
 
        return new InitialContext(props);
}
String userName = "userAlex";
String userPass = "pass1234";
Таким образом вы передаете данные пользователя, под которым хотите взаимодействовать с бином.


Context context = getInitialContext();

String earName="myejb"; // myejb.ear - то что задеплоено на сервер, где находится jar с бином
String jarName="servercode"; // servercode.jar - внутри ear находится jar файл, в котором наш ejb bean
String beanClassSimpleName; // ServerInfo
String beanClassName; // com.gp.ejb.ServerInfoRemote

ServerInfoRemote statelessBean = ServerInfoRemote context.lookup("myejb/servercode/ServerInfo!com.gp.ejb.ServerInfoRemote") ;

Эту же стороку можно увидеть, когда вы деплоите на сервер свой ear. В консоли JBoss при деплое выводит JNDI имена. Воспользоваться можно только одним, и то, определенным способом
Для данного примера AS7 выведет среди прочих:
java:jboss/exported/myejb/servercode/ServerInfo!com.gp.ejb.ServerInfoRemote

В общем случае, подойдет то, что после exported.

Таким образом мы получаем доступ (прокси) к нашему бину.
Далее вызовем удаленный метод:
String s = statelessBean.getServerInfo() // получим s= "Server works. User/Executor/Principal = userAlex"

Можно также подключать на сервере и другие LoginModules , например для аутентификации пользователей не из файла properties как в данном примере, а из базы данных (https://community.jboss.org/thread/168992)
к счастью информация на эту тему широко доступна.
Да, при изменении файла с пользователями, сервер сразу же подтягивает информацию из файла (как измененные пароли, новые пользователи или изменение ролей у пользователя), перезапускать не надо.

Можно также подключить SSL. В этом случае удаленное взаимодействие станет еще и безопасным. Но это уже отдельная песня.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.10.2012, 19:47
Помогаю со студенческими работами здесь

Перевод Обычного приложения Толстого Клиента в Управляемое
Подскажите пожалуйста возможно ли это? Пытались перевести- ни одна форма не открывается.

Принудительно задать компилятору толстого клиента в общем модуле
Здравствуйте, возникла необходимость принудительно задать компилятору толстого клиента в общем модуле, имеющем тип клиент(толстый),...

Как запустить клиента на JBoss?
Господа! Was been deployed beans in JBoss. А как собственно запаковать и запустить клиента, чтоб протестировать его?

Кто-нибудь писал IIOP клиента под JBoss?
Кто-нибудь писал IIOP клиента под JBoss? Что-то у меня не получается... (скажу сразу, опыт написания IIOP для SunONE есть) ...

Dwa: аутентификация на основе сертификата клиента
Пользователи наряду с простой аутентификацией, по имени и паролю,могут использовать сеансовую на основе https, интересует именно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru