2012-06-11 4 views
1

Я ищу, но я не могу найти ответ, мне нужны защищенные ресурсы на основе разрешений, я не могу использовать фильтр, потому что FacesContext не инициализирован раньше, и мне нужно загрузить разрешения в моем сеансе. Некоторое решение избегает использования фильтра? PhaseListener, и ResourceHandler обработка просмотры не могут захватить запрос URL ресурса, например, мне нужно отрицать это прямой доступ: http://127.0.0.1:8080/test/resources/images/image.jpgКак я мог прочитать сессию сеанса JSF из фильтра?

Thx заранее ...

ответ

1

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 в фильтре.

+0

мой фильтр запускается раньше, чем JSF, я всегда получаю нулевое значение, когда использую getAttribute. Я использую CDI с аннотациями «Named» и «SessionScoped» на моем Bean, потому что мне нужно использовать перехватчик для обеспечения безопасности. – Kab

+0

Я обновил ответ. Я не ожидал, что вы используете CDI, потому что это довольно просто в CDI. – BalusC

+0

Хорошо, я удалил свой комментарий ... CDI работал с абстрактным классом ... вы лучшие ... спасибо ... =) – Kab

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