Web.xml: почему такая плохая гибкость для URL-шаблонов в ограничениях безопасности?

Я использую GlassFish 3.1 и хочу использовать аутентификацию контейнера. Когда я начал писать ограничение безопасности в файле web.xml, у меня было ощущение, что шаблоны URL имеют очень небольшую гибкость. Глава 12.2 в спецификации сервлета 3.0 описывает допустимые шаблоны URL для отображения сервлета:

  1. Пункт списка
  2. /что-то/* для сопоставления путей
  3. *.extension для сопоставления расширений
  4. точное отображение
  5. корневые случаи по умолчанию и контекст

12.1 описывает алгоритм сопоставления и в пункте 2 говорится: Контейнер будет рекурсивно пытаться сопоставить самый длинный префикс пути. Это делается путем перехода вниз по дереву путей по каталогу за раз, используя символ «/» в качестве разделителя пути. Самое длинное совпадение определяет выбранный сервлет.

Ограничения безопасности описаны в главе 13, и из 13.8.3 кажется, что шаблоны URL и алгоритм сопоставления такие же, как и для сервлета.

Представьте, что у вас есть унаследованное приложение со страницами JSF, организованными следующим образом: для каждого класса сущностей есть каталог с именем сущности, который содержит 4 файла JSF (список, редактирование, создание, просмотр). Что делать, если вы хотите защитить доступ к редактированию и созданию страниц? Мне кажется, что вы можете использовать только «точное совпадение» в шаблоне URL-адреса, поэтому вам нужно написать ограничение для каждой страницы, которую вы хотите защитить, очень долгое и утомительное действие, подверженное ошибкам. Кроме того, если я защищаю весь каталог правилом сопоставления путей (например, /customers/* ), я не вижу никакого способа снять это ограничение для конкретной страницы внутри этого каталога (например, если требуется чтобы освободить доступ к странице «Список» внутри защищенного каталога).

Во время экспериментов с Glassfish 3.1 я заметил это странное поведение: сопоставления путей работают хорошо, только если они абсолютны из корня контекста, поэтому при использовании конфигурации jsf по умолчанию они должны начинаться с «/faces». Если я напишу /customers/ вместо /faces/customers/, ограничение безопасности не будет оцениваться. По моему мнению, это контрастирует с тем, что указано в 12.1 (сообщено выше).

Может ли кто-нибудь пролить свет на то, как можно эффективно использовать шаблон URL для определения ограничений безопасности? Очевидно, что вы можете поместить все конфиденциальные JSF в каталог '/protected', но это очень инвазивный способ достижения цели с безопасностью, который нарушает любой логический порядок JSF.

Спасибо, Филиппо.


person Filippo    schedule 22.08.2011    source источник


Ответы (1)


Может ли кто-нибудь пролить свет на то, как можно эффективно использовать шаблон url для определения ограничений безопасности?

Я не могу, после нескольких лет использования Java EE я чувствую, что ограничения безопасности Java EE полезны только для аутентификации. Если дело доходит до авторизации (уполномочен ли известный объект для выполнения определенного действия), эта модель безопасности не работает, поскольку она слишком общая (зависит от URL-адреса). Вы можете посмотреть, например. Весенняя безопасность. В зависимости от сложности варианта использования вы можете рассмотреть возможность создания собственного, особенно когда речь идет о безопасности, ориентированной на данные (например, только пользователям в организации A разрешено изменять данные, предоставленные организацией B).

Не совсем ответ, но мое мнение...

person home    schedule 22.08.2011
comment
В завершение моего предыдущего комментария. Здесь ссылка я нашел несколько руководств по безопасности веб-приложений. и все они используют механизм аутентификации и авторизации контейнера. Я начинаю думать, что эти уроки — пустая трата времени, если вы не можете адаптировать их к реальному делу. Я надеялся найти кого-нибудь, кто использует авторизацию контейнера, но, похоже, все полагаются на сторонние библиотеки для обеспечения безопасности... Я ошибаюсь?? - person Filippo; 25.08.2011
comment
@Filippo: я думаю, стоит взглянуть на учебники. Авторизация используется сегодня (и я тоже ей пользовался), я просто испытал, что в определенный момент времени вы приходите к точке, где этого уже недостаточно... например. безопасность на уровне данных. Таким образом, вы должны решить, имеет ли смысл вообще начинать с авторизации JEE. Имейте в виду, что аутентификация в порядке. - person home; 25.08.2011