2012-04-04 6 views
1

Я в настоящее время стучу головой, где поставить общую логику для некоторых материалов авторизации в моем Java EE 6/JSF 2 webapp: У меня есть требование, чтобы все запросы, которые поставляются с конкретный файл cookie должен быть перенаправлен на другую страницу.где поместить фильтр как логику в JSF2

Я рассмотрел 3 решения:

1) использовать фильтр сервлета 3.0 (@WebFilter) это работало, я также мог бы придать управляемые боб там, но управляемые компоненты требуют доступа к граням externalContext, который во время фильтр вызова еще не был создан, так что я получил NPE зовёт управляемые бобы

2) используют фазовый приемник это чувствует себя неловко, потому что фаза слушатель не может быть компонентом CDI и поэтому не может вводить другие компоненты (кроме эль-оценки); фазаListener для меня чувствует к техническому, чтобы вставить в него навигационную логику.

3) в пластах 2.0 я мог бы использоваться «действия страницы» для вещей, как это, но мне кажется, что эта концепция не превратить его в JSF 2.0

в шве это выглядело как:

<page view-id="/admin/*.jsf"> 
    <action execute="#{authenticator.checkAccess()}" /> 
</page> 

Действительно ли это, что JSF 2.0 не имеет концепции для выполнения «логики контроллера» перед визуализацией страницы?

ответ

2

В JSF 2.x вы можете слушать на страницу события, как, что:

<f:metadata> 
    <f:event type="javax.faces.event.PreRenderViewEvent" listener="#authenticator.checkAccess()}" /> 
</f:metadata> 

Это более или менее эквивалентно Seam 2 страницы действия (вы должны отфильтровать постбэки хотя). Вы также можете улучшить поведение по умолчанию с помощью CDI-расширений, таких как Seam Faces. Вероятно, это хорошая идея, если вы посмотрите на документацию и посмотрите, что вам подходит ...

+0

привет, спасибо за ваш быстрый ответ, не знал об этой функции! Итак, если я хочу быть уверенным, что все мои jsf-страницы перехвачены, единственным способом было бы гарантировать, что все страницы jsf включают этот фрагмент кода (например, через композицию страницы)? – fujan

+0

Нет, это не единственный способ. Если бы я был вами, я бы исследовал дальше в опции filter - поскольку это стандартное требование для многих JSF-приложений, наверняка должно быть сложное решение для вашего вопроса. –

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