Вызов SLSB с безопасностью Шва от сервлета

Мне записали существующее приложение во ШВЕ, который использует безопасность ШВА (http://docs.jboss.org/seam/2.1.1.GA/reference/en-US/html/security.html). В EJB не сохраняющем состояние я мог бы найти что-то вроде этого:

@In
Identity identity;

... 

if(identity.hasRole("admin"))
  throw new AuthException();

Насколько я понимаю, Шов вводит объект Идентификационных данных от SessionContext сервлета, который вызывает EJB (это происходит "негласно", так как Шов действительно не использует сервлеты), и удаляет его после вызова. Это корректно?

Теперь возможно получить доступ к этому EJB от другого сервлета (в этом случае, тот сервлет является стороной сервера приложения GWT)? Я должен "ввести" корректный экземпляр Идентификационных данных? Если я ничего не делаю, Шов вводит экземпляр, но правильно не коррелирует сессии и экземпляры Идентификационных данных (таким образом, экземпляры Идентификационных данных совместно используются сессиями, и иногда звонит, получают новые экземпляры и т.д.).

Любая справка и указатели очень приветствуются - Спасибо!

Технология: EJB3, Шов 2.1.2. Сервлеты являются на самом деле серверной стороной приложения GWT, хотя я не думаю, что это имеет значение очень. Я использую JBoss 5.

1
задан wilth 6 June 2010 в 17:17
поделиться

2 ответа

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

PS: Возможно, вам стоит перефразировать свой вопрос и попытаться четко различать такие понятия, как HTTP-сеанс, Session Beans (без отслеживания состояния, с отслеживанием состояния?), SessionContext .

0
ответ дан 3 September 2019 в 00:01
поделиться

Seam инжектирует объект Identity из SessionContext сервлета, который вызывает EJB, и удаляет его после вызова. Правильно ли это?

Да, но не забывайте, что вы должны включить перехватчик EJB Seam Смотрите здесь как

...

Можно ли теперь получить доступ к ЛЮБОМУ EJB из другого сервлета

Да, вы можете использовать его глобальный JNDI (зависит от поставщика), чтобы получить его. Смотрите здесь, как вы можете настроить и получить ваш EJB @State less / ful bean. Если у вас есть полностьюподдерживаемый сервер приложений Java EE, вы можете получить его с помощью аннотаций.

Нужно ли мне "инжектировать" правильный экземпляр Identity?

Вам не нужно об этом беспокоиться. Seam EJB interceptor позаботится об этом. Продолжайте.

UPDATE

но в EJB инжектируются два разных экземпляра Identity. Я предполагаю, что контекст сессии, который использует Seam, неправильно связан с контекстом сессии сервлета? Есть идеи ?

Ну, сам компонент Identity не реализует метод equals, который, по умолчанию, использует реализацию equals по умолчанию, используя сравнение equals (==). Я не знаю, всегда ли для каждого вызова EJB у вас есть свежий компонент Identity (возможно, это объясняет, почему у вас есть "два разных экземпляра")

Если ваши сервлеты разделяют один и тот же контекст, вы можете включить IdentityFilter как способ обернуть назначенную Identity роль, используя метод isUserInRole. Вот его функциональность:

Фильтр, который обеспечивает интеграцию между Servlet Security и компонентом идентификации Seam. Эта интеграция достигается путем обертывания HttpServletRequest реализацией HttpServletRequestWrapper который делегирует связанные с безопасностью вызовы компоненту Seam identity .

Если использовать компонент @Identity, он включен по умолчанию

Поэтому вместо того, чтобы инжектировать свой EJB (и его @In-jected @Identity) и использовать

identity.hasRole("admin");

Вы можете использовать

request.hasUserInRole("admin");

И, возможно, вы захотите посмотреть Установка и чтение идентификатора разговора И Seam и GWT

Еще

Контекстный фильтр (не включен по умолчанию) открывает доступ к контейнеру Seam и его контекстным переменным для сервлетов, не относящихся к JSF, таким как Struts, Spring MVC и Direct Web Remoting (DWR). Я не знаю, как использовать этот вид функциональности.

2
ответ дан 3 September 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: