Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Jaas, простейший пример 
:(
    Опции темы
mbasil
Дата 17.3.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



1. Можно использовать декларативную безопасность в web контейнере так, как вы это описали в своем пункте 4 (то есть элемент <security-constraint>)
2. Можно продлить эту декларативную безопасность в EJB компоненты, описав каким ролям доступен вызов каких методов. 
3. Можно использовать программную безопасность в web контейнере используя методы
    getUserPrincipal()
    isUserInRole()
4. Можно использовать программную безопасность в EJB контейнере используя методы
    getCallerPrincipal()
    isCallerInRole()

(Первые два пункта предпочтительнее последних двух)
PM MAIL   Вверх
garbuz
Дата 17.3.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



mbasil, ну EJB сразу откидываем, так как с EJB я практически не знаком. Будем говорить в контексте обычного веб-приложения.
Почему декларативная безопасность предпочтительнее программной? Все ли можно описать в декларативной, что в программной? Взять например вот это:
Код

 grant principal com.test.AdminPrincipal "admin" {
      permission java.io.FilePermission "/home/price.txt", "read, write";
  };

Как это описать в декларативном виде? Не терям ли мы гибкость и удобство?
PM MAIL   Вверх
mbasil
Дата 17.3.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



Конечно основные преимущества декларативной авторизации мы получаем именно в EJB, так как там мы имеем дело с хорошо гранулированным контролем доступа на уровне методов.

В web контейнере речь идет о правах доступа к ресурсам, описываемым в web.xml. Это дает возможность управлять доступом к ресурсам WEB ПРИЛОЖЕНИЯ с использованием встроенных средств контейнера, причем после внесения изменений не всегда требуется даже повторно развертывать приложение. Иногда достаточно перезагрузить его.
Приведенный вами пример скорее подходит для standalone приложения. Кроме того включение менеджера безопасности, которое обязательно надо будет сделать, чтобы это работало (по непонятным для меня причинам) резко снижает производительность даже простого standalone приложения.
PM MAIL   Вверх
garbuz
Дата 17.3.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



mbasil, ясно, спасибо. Буду при возможности дальше курить книгу, уверен что еще отпишу в этой теме.
PM MAIL   Вверх
mbasil
Дата 17.3.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



Лично мне JAAS нравится именно своей гибкостью и тем, что я могу отнять у контенера работу по аутентификации и авторизации и сделать это так, как мне нравится, например с хранением полномочий в базе данных или на LDAP сервере. Вы можете сказать, но ведь например, Tomcat тоже позволяет получать полномочия из базы данных. Да, но делает это в жестких рамках и при преносе приложения на другой сервер я опять должен это переделывать (включая таблицы базы и т.п.). Кроме того, вы можете использовать JAAS, например для аутентификации с помощью JavaCard или с контролем отпечатков пальцев.
При использовании JAAS, принимая механизм аутентификации на себя, я результаты "подсовываю" контейнеру для выполнения декларативной авторизации и он это съедает. Очень удобно, на мой взгляд.
PM MAIL   Вверх
garbuz
Дата 17.3.2009, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



Цитата(mbasil @  17.3.2009,  16:39 Найти цитируемый пост)
например с хранением полномочий в базе данных или на LDAP сервере

Что вы имеете ввиду под полномочиями? Роли как я понимаю? Так как потом использовать все эти роли? Везде чекать isUrerInRole? Как вы делаете?


Цитата(mbasil @  17.3.2009,  16:39 Найти цитируемый пост)
Вы можете сказать, но ведь например, Tomcat тоже позволяет получать полномочия из базы данных. Да, но делает это в жестких рамках и при преносе приложения на другой сервер я опять должен это переделывать (включая таблицы базы и т.п.)

Ну да, роли хранятся в базе. Как-то можно обойтись без этих таблиц при переносе приложения?


Цитата(mbasil @  17.3.2009,  16:39 Найти цитируемый пост)
Кроме того, вы можете использовать JAAS, например для аутентификации с помощью JavaCard или с контролем отпечатков пальцев

Да, это конечно круто, достаточно лишь реализовать соответствующий LoginModule


Цитата(mbasil @  17.3.2009,  16:39 Найти цитируемый пост)
При использовании JAAS, принимая механизм аутентификации на себя, я результаты "подсовываю" контейнеру для выполнения декларативной авторизации и он это съедает

Вот тут что-то не понял. Разве в случае с JDBCRealm и DataSourceRealm это не так же?
PM MAIL   Вверх
mbasil
Дата 17.3.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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 секунд
Что касается - как проверять, вы же сами приводили пример
Код

<security-constraint>
        <web-resource-collection>
            <web-resource-name>My App</web-resource-name>
            <url-pattern>/upload</url-pattern>
            <url-pattern>/download</url-pattern>
            <url-pattern>/upload.jsp</url-pattern>
            <url-pattern>/about.jsp</url-pattern>
            <url-pattern>/about</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
        </web-resource-collection>
        <auth-constraint>
            <role-name>operator</role-name>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

В Web контейнере это основной декларативный способ - контроль доступности навигационных путей (ресурсов) с помощью ролей. Чекать isUrerInRole это очень редко, только там, где по другому нельзя.
PM MAIL   Вверх
garbuz
Дата 24.4.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 8
Всего: 11



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


Это сообщение отредактировал(а) garbuz - 25.4.2009, 10:48
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0703 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.