Seam внедряет объект Identity из SessionContext сервлета, который вызывает EJB и удаляет его после вызова. Это правильно?
Да, но не забывайте, что вы должны включить EJB Перехватчик швов. См. здесь как
...
Теперь можно получить доступ к ЛЮБОМ EJB из другого сервлета
Да, вы можете использовать его Global JNDI (зависит от поставщика), чтобы получить его. Смотрите здесь , как вы можете настроить и получить ваш EJB @State less / ful bean. Если у вас есть сервер приложений Java EE с поддержкой полностью , вы можете получить его с помощью аннотаций.
Нужно ли "вводить" правильный экземпляр Identity?
Вам не нужно об этом беспокоиться. Шов EJB перехватчик позаботится об этом. Вперед.
UPDATE
но в EJB вводятся два разных экземпляра идентичности. Я предполагаю, что контекст сеанса, который использует Seam, неправильно связан с контекстом сеанса сервлета? Есть идеи?
Ну, сам компонент Identity не реализует метод equals, который по умолчанию использует реализацию equals по умолчанию с использованием сравнения equals (==). Я не знаю, есть ли для каждого вызова EJB всегда новый компонент Identity (возможно, это объясняет, почему у вас есть «Два разных экземпляра»)
Если ваш сервлет совместно использует тот же контекст , вы можете включить IdentityFilter как способ обернуть вашу роль, назначенную для идентификации, используя isUserInRole метод. Вот его функциональность:
Фильтр, который обеспечивает интеграцию между Servlet Security и компонентом идентификации Seam. Эта интеграция достигается путем обертывания HttpServletRequest с реализацией HttpServletRequestWrapper , которая делегирует связанные с безопасностью вызовы компоненту идентификации Seam .
Если используется компонент @Identity, он включен по умолчанию
Так что вместо того, чтобы вводить свой EJB (и его @ In-jected @Identity) и использовать
identity.hasRole("admin");
Вы можете использовать
request.hasUserInRole("admin");
А может быть, вы хотите увидеть Установка и чтение идентификатора разговора И Шов и GWT
Подробнее
ContextFilter (по умолчанию не включен) открывает доступ к контейнеру Seam и его переменным контекста для не сервлетов JSF, таких как Struts, Spring MVC и Direct Web Remoting (DWR). Я не знаю, как использовать эту функцию.