2015-01-06 7 views
0

У меня есть сценарий, когда пользователю с определенной ролью разрешено вызывать метод EJB на основе его собственного идентификатора. На элементе EJB у меня есть аннотация @RolesAllowed с конкретной ролью пользователя. Для проверки на основе роли метод invoke работает отлично, однако, если пользователь в картинке вызывает метод bean, передающий идентификатор другого пользователя, метод все равно вызывается. Как избежать этого сценария с помощью RBAC или мне нужно добиться этого, используя любой альтернативный способ?Управление доступом одного пользователя к ресурсам другого пользователя на основе RBAC

ответ

0

Ваша логика приложения (логика аутентификации) должна препятствовать вызову метода с использованием другого идентификатора пользователя. В некотором роде, когда вы это делаете, вы подделываете чужую личность.

В аннотации @RolesAllowed следует использовать роли, которые извлекаются на основе идентификатора пользователя, полученного из фреймворка, а не из значения, переданного пользователем вручную. Чтобы дать вам пример в мире сервлетов, вы должны использовать метод getUserPrincipal() объекта HttpServletRequest.

Я цитирую здесь абзац из учебника Java EE 6 о сервлетах. Вы можете экстраполировать одни и те же принципы на ejbs.

Проверка вызывающего абонента Удостоверение В Программная целом, управление безопасностью должно быть приведено в исполнение в контейнере таким образом, что является прозрачным для веб-компонента. API безопасности, описанный в этом разделе, должен использоваться только в менее частых ситуациях, когда методы веб-компонентов должны обращаться к информации контекста безопасности.

  • Servlet 3.0 определяет следующие методы, которые позволяют получить доступ к информации о безопасности о вызывающей компоненте:
  • getRemoteUser, которая определяет имя пользователя, с которым клиент аутентификацией. Метод getRemoteUser возвращает имя удаленного пользователя (вызывающего), связанного контейнером с запросом. Если ни один пользователь не прошел аутентификацию, этот метод возвращает null.
  • isUserInRole, который определяет, находится ли удаленный пользователь в определенной роли безопасности. Если ни один пользователь не прошел проверку подлинности, этот метод возвращает false. Этот метод ожидает параметр роли ролей пользователя String.

Элемент security-role-ref должен быть объявлен в дескрипторе развертывания с подэлементом ролей-имен, содержащим имя роли, которое должно быть передано методу. Использование ссылок на роль безопасности обсуждается в разделе «Объявления и ссылки на ссылки на ссылки».

  • getUserPrincipal, который определяет основное имя текущего пользователя и возвращает объект java.security.Principal. Если ни один пользователь не прошел аутентификацию, этот метод возвращает null. Вызов метода getName для принципала, возвращаемого getUserPrincipal, возвращает имя удаленного пользователя.

Приложение может принимать бизнес-логические решения на основе информации, полученной с использованием этих API.

Источник: Using Programmatic Security with Web Applications

 Смежные вопросы

  • Нет связанных вопросов^_^