JSF сохраняет сеанса области действия, управляемые бобов в качестве атрибута HttpSession
, который, в свою очередь, доступен только в Filter
на HttpServletRequest#getSession()
.
HttpSession session = ((HttpServletRequest) request).getSession();
SessionBean sessionBean = session.getAttribute("sessionBean");
// ...
Update: согласно комментария вы, кажется, на самом деле с помощью CDI:
мой фильтр срабатывает, прежде чем JSF, я всегда получаю нулевое значение, когда я использую GetAttribute. Я использую CDI с «именем» и аннотациям «SessionScoped» на моем Bean, потому что мне нужно использовать перехватчик для обеспечения безопасности
я понял, что вы использовали JSF собственной @ManagedBean
и первоначальный ответ относится только к тому, что , Если ваш компонент уже управляется CDI @Named
, то просто используйте собственный CDI @Inject
в обычном порядке в Filter
.
@Inject
private SessionBean sessionBean;
В случае JSF @ManagedBean
вы должны просто добавить if (sessionBean != null)
чек. Не имеет значения, вызывается ли фильтр перед сервлетом JSF или нет. Когда сеансовый компонент был создан JSF, он не будет null
в фильтре.
мой фильтр запускается раньше, чем JSF, я всегда получаю нулевое значение, когда использую getAttribute. Я использую CDI с аннотациями «Named» и «SessionScoped» на моем Bean, потому что мне нужно использовать перехватчик для обеспечения безопасности. – Kab
Я обновил ответ. Я не ожидал, что вы используете CDI, потому что это довольно просто в CDI. – BalusC
Хорошо, я удалил свой комментарий ... CDI работал с абстрактным классом ... вы лучшие ... спасибо ... =) – Kab