![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
garbuz |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
Начал читать книгу по jaas. Вместе с книгой идут исходники всех проектов из книги, которые запросто импортируются в эклипс. Все примеры запускаются из ant скрипта, каждый target запускает соответствующий пример. Так вот, дошел до первого простейшего примера, все запустил, все работает. Затем решил выдрать этот примерчик в отдельный проект. Вот тут и возникли проблемы.
Вот сам код
Есть еще policy файл с пермишшенами
Запускаю из-под эклипса задав VM parameters, которые указаны в ant-скрипте.
Изменение файла policy ни к чему не приводит, хотя должно, я имею ввиду изменение "write" на "read", если такие изменения производить с файлом, который относится к проекту из книги, то там эти изменения действуют сразу. Такое чувство, что то-ли параметры не воспринимаются, то ли я где-то сильно затупил. Прошу помощи. |
||||||
|
|||||||
ivg |
|
||||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
|
||||||
|
|||||||
garbuz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
ivg, спасибо большое! Все получилось! Тему не закрываю, боюсь, что еще будет не один вопрос
![]() |
|||
|
||||
garbuz |
|
||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
Неспешно добрался до второго примера и тут тоже возникли непонятки. Так же как и раньше (см. выше) вынес приложение из общего в отдельное. Приложение уже больше похоже на приложение, тут используюстся LoginModule, CallbackHandler, Principals. Вот небольшое описание
Итак, что у нас есть. Main
наш CallbackHandler
SimpleLoginModule
Ну и два класса Principals, которые особой важности пока не имеют. Помимо этих классов существуеют так же два файла: 1) policy файл с правами доступа
2) Проперти файл для LoginContext
Короче как ни пытался запустить - ничего не вышло, кидает
Если запускать не из отдельно проекта, а из общего из книги через ant, то все равно такая же картина :( Возможно опять где-то что-то не усмотрел. Заранее спасибо! |
||||||||||||||
|
|||||||||||||||
ivg |
|
||||||||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
1. Если содержимое policy файла, которое вы привели находится в файле C:/java/chapter2/chp02.policy, тогда аргументы для запуска JVM
2. Исправьте 12-ю строку policy файла на
3. Содержимое , у меня находится в файле ${user.home}/.java.login.config Это сообщение отредактировал(а) ivg - 12.1.2009, 21:35 |
||||||||||
|
|||||||||||
garbuz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
Совсем забыл указать параметры запуска, вот они!
ivg, спасибо за помощь, сейчас буду разбираться ![]() |
|||
|
||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
||||
|
||||
garbuz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
Поправил на
тот же эксепшн ![]() |
|||
|
||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
|
|||
|
||||
garbuz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
ivg, приедешь в Питер, с меня ящик пива! Спасибо большое!!!
![]() |
|||
|
||||
garbuz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
Пока не взялся за следующую главу книги, хочу выяснить некоторые вещи:
1) Если будет веб приложение, которое крутится на томкате, что лучше юзать для аутен\авторизац в приложении, встроенные стредства томката или jaas? 2) Насколько хороши встроенные стредства томката? Позволяет ли томкат использовать для авторизации бд, или же только свой tomcat-users.xml 3) В томкате аутен\авторизац только через ssl или же нет? 4) Короче в голове пока какая-то каша, может кто попробует разложить по полочкам? ![]() |
|||
|
||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
||||
|
||||
garbuz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
Пока еще по ссылке не прочитал.
Хочу спросить еще Realm это совершенно отдельная часть от jaas? Если да, то в какую сторону лучше копать? Какие у кого преимущества? |
|||
|
||||
garbuz |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
Вот опять немного свободно времени выдалось, сел ковырять jaas дальше.
Есть вопросы по LoginModule, в частности по методу commit() По имени пользователя создается credential - объект
Затем этот объект добавляется в объект subject к общим credentials.
Креденшинал объект, насколько я понял, это объект, содержащий идентифицирующие пользователя данные, например логин и пароль, ну или одно из них. Верно? или я ошибаюсь? Вопрос: для чего они нам дальше могут потребоваться? Дальше в этом методе получают объекты типа Principal, например такой
Потом набор этих principals добавляется в объект subject.
В чем смысл этих principals. Для чего они надо? В чем отличие от Credential? Короче в голове вообще какая-то каша! В доках томката в описании JAASRealm написано
так вот. Например у меня в базе три вида ролей, как я понимаю надо создать три разных principal - объекта , хотя это зачем непонятно. Различаться они будут только типом (классом) и значением поля name. А вот с principals для user вообще непонятно. Создавать такой же объект как и для роли, только название класса изменить на UserPrincipal? Что-то я вообще не догоняю. После всего этого как я понимаю, мне надо будет запустить томкат и в параметрах запуска указать конфиг файл, где указываю к какому приложению какой loginModule применять, верно? |
||||||||||
|
|||||||||||
garbuz |
|
||||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
Итак, опять я взялся ковырять jaas. Дописал для томката модуль аутентификации, опираясь на пример из книги, хотя книгу до конца еще не просмотрел. Вот что из этого вышло.
В конфигах томката
Аутентификация проходит нормально, все вроде бы работает. Однако у меня остались все те же вопросы. 1) Как мне использовать созданные Principals? 2) Надо ли их вообще использовать? 3) Как ограничивать какой-либо доступ куда-либо? Это делается с помощью описания policy файла как я понимаю? 4) Зачем это делать через policy, если это действеительно надо, если у меня все прописано в web.xml
5) Для чего нам нужет объек UsernameCredential? Как в дальнейшем и для чего его можно использовать? 6) Еще вопрос по поводу Prinsipals. Если например у меня несколько возможных ролей. Для каждой роли надо описывать соответствеющий Principal-класс и потом в policy для каждого principals описывать права доступа? Или же тут можно обойтись одним классом, и работать с полем name? Как в этом случае быть не с ролями, а с юзерами? 7) Был ли у кого-нибудь реальный опыт работы с jaas? Может кто ответит на мои вопросы ![]() 8) Может кто приведет свой реальный пример использования jaas? Заранее спасибо! |
||||||||||||||||
|
|||||||||||||||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
1. Можно использовать декларативную безопасность в web контейнере так, как вы это описали в своем пункте 4 (то есть элемент <security-constraint>)
2. Можно продлить эту декларативную безопасность в EJB компоненты, описав каким ролям доступен вызов каких методов. 3. Можно использовать программную безопасность в web контейнере используя методы getUserPrincipal() isUserInRole() 4. Можно использовать программную безопасность в EJB контейнере используя методы getCallerPrincipal() isCallerInRole() (Первые два пункта предпочтительнее последних двух) |
|||
|
||||
garbuz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
mbasil, ну EJB сразу откидываем, так как с EJB я практически не знаком. Будем говорить в контексте обычного веб-приложения.
Почему декларативная безопасность предпочтительнее программной? Все ли можно описать в декларативной, что в программной? Взять например вот это:
Как это описать в декларативном виде? Не терям ли мы гибкость и удобство? |
|||
|
||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Конечно основные преимущества декларативной авторизации мы получаем именно в EJB, так как там мы имеем дело с хорошо гранулированным контролем доступа на уровне методов.
В web контейнере речь идет о правах доступа к ресурсам, описываемым в web.xml. Это дает возможность управлять доступом к ресурсам WEB ПРИЛОЖЕНИЯ с использованием встроенных средств контейнера, причем после внесения изменений не всегда требуется даже повторно развертывать приложение. Иногда достаточно перезагрузить его. Приведенный вами пример скорее подходит для standalone приложения. Кроме того включение менеджера безопасности, которое обязательно надо будет сделать, чтобы это работало (по непонятным для меня причинам) резко снижает производительность даже простого standalone приложения. |
|||
|
||||
garbuz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
mbasil, ясно, спасибо. Буду при возможности дальше курить книгу, уверен что еще отпишу в этой теме.
|
|||
|
||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Лично мне JAAS нравится именно своей гибкостью и тем, что я могу отнять у контенера работу по аутентификации и авторизации и сделать это так, как мне нравится, например с хранением полномочий в базе данных или на LDAP сервере. Вы можете сказать, но ведь например, Tomcat тоже позволяет получать полномочия из базы данных. Да, но делает это в жестких рамках и при преносе приложения на другой сервер я опять должен это переделывать (включая таблицы базы и т.п.). Кроме того, вы можете использовать JAAS, например для аутентификации с помощью JavaCard или с контролем отпечатков пальцев.
При использовании JAAS, принимая механизм аутентификации на себя, я результаты "подсовываю" контейнеру для выполнения декларативной авторизации и он это съедает. Очень удобно, на мой взгляд. |
|||
|
||||
garbuz |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
Что вы имеете ввиду под полномочиями? Роли как я понимаю? Так как потом использовать все эти роли? Везде чекать isUrerInRole? Как вы делаете?
Ну да, роли хранятся в базе. Как-то можно обойтись без этих таблиц при переносе приложения?
Да, это конечно круто, достаточно лишь реализовать соответствующий LoginModule
Вот тут что-то не понял. Разве в случае с JDBCRealm и DataSourceRealm это не так же? |
||||||
|
|||||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
1. Под полномочиями я понимаю то, что предполагает спецификация Java EE, а именно имена пользователей, пароли и роли. Но никто мне не мешает хранить в базе данных сертификаты и проверять их в своем LoginModule, а затем связывать их с ролями.
2. Поскольку имена пользователей, пароли и роли хранятся в моих собственных таблицах замене сервера приложений эта часть изменению не подлежит. При замене базы я просто выгружаю эту схему в SQL скрипт и загружаю в другую базу. 3. JDBCRealm и DataSourceRealm это за рамками спецификации "Java™ Platform, Enterprise Edition (Java EE) Specification, v5", а значит другие сервера приложений не обязаны именно так работать с аутентификацией в базе данных. И скорее всего они потребуют других названий таблиц и т.п. 4. Сегодня JAAS стандарт Java так я и предпочитаю пользоваться стандартным механизмом, который работает на всех серверах приложений. Добавлено через 5 минут и 17 секунд Что касается - как проверять, вы же сами приводили пример
В Web контейнере это основной декларативный способ - контроль доступности навигационных путей (ресурсов) с помощью ролей. Чекать isUrerInRole это очень редко, только там, где по другому нельзя. |
|||
|
||||
garbuz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 677 Регистрация: 22.1.2008 Репутация: 8 Всего: 11 |
У меня тут еще вопрос вылез, например у нас есть некая страничка, которая доступна и пользователю и администратору, однако если это администратор, то на страничке должен появиться дополнительный функционал, например для редактирования какой-нибудь например новости. Как это реализовать? Каждый раз в коде проверять isUserInRole в том месте где надо вставить кнопку для редактирования? Так? Или же есть более грамотный способ?
Это сообщение отредактировал(а) garbuz - 25.4.2009, 10:48 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |