Управление принципом безопасности передается по вызову EJB - PullRequest
0 голосов
/ 25 марта 2010

Я работаю над большим существующим приложением EJB 1.1, которое в настоящее время обеспечивает собственную безопасность и не имеет управляемой защиты EJB.

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

Как только я создал java.security.Principle, где я храню его, чтобы он передавался в моих ejb-вызовах и был доступен из context.getCallerPrincipal ()?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 25 марта 2010

Безопасность Java EE - это все или ничего. Вы должны использовать механизм аутентификации Java EE, чтобы правильно установить контекст безопасности. Как видите, EJBContext, который вы можете получить путем инъекции, доступен только для чтения.

Единственный стандартный способ изменения контекста безопасности, который мне известен, - это использовать такие вещи, как @RunAs (см. пример ), но он очень негибкий. Вы не можете передавать учетные данные динамически.

Существует некоторый непереносимый механизм, специфичный для контейнера, например Glassfish имеет ProgrammaticLogin. Но даже в этом случае вам необходимо передать имя пользователя / пароль, вы не можете просто изменить Principal на лету.

Я помню, как читал статьи, в которых объяснялось, как устанавливать контекст безопасности вручную, используя внутренний API контейнера, но он, конечно, непереносим и не поддерживается.

1 голос
/ 05 апреля 2018

Новый API безопасности в Java EE 8 обеспечивает согласованный подход к безопасности. Абстракция SecurityContext охватывает контейнеры Servlet и EJB и предоставляет методы, которые возвращают пользователя.

В Java EE 5/6/7 контейнеры сервлета и EJB несовместимо реализуют объекты контекста безопасности. Например, контейнер сервлета предоставляет экземпляр HttpServletRequest, для которого вызывается метод getUserPrincipal() для получения пользователя Principal, а контейнер EJB предоставляет экземпляр EJBContext с другим именем, для которого вызывается метод с тем же именем , И также, чтобы проверить, принадлежит ли пользователь определенной роли, метод isUserRole() вызывается для экземпляра HttpServletRequest, а isCallerInRole() вызывается для экземпляра EJBContext.

SecurityContext обеспечивает согласованность между сервлетом и контейнером EJB для получения такого рода информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...