在JSF2中放置类似逻辑的过滤器的位置

时间:2012-04-04 09:47:46

标签: jsf-2 java-ee-6 cdi

我正在敲打我的脑袋,在我的Java EE 6 / JSF 2 webapp中为某些授权内容添加一个通用逻辑: 我有要求,特定cookie附带的所有请求都应该重定向到另一个页面。

我考虑了3个解决方案:

1)使用servlet 3.0过滤器(@WebFilter) 这工作,我也可以注入我的托管bean,但托管bean需要访问面部externalContext,在过滤器调用时尚未设置,所以我得到NPE调用托管bean

2)使用阶段监听器 这感觉很尴尬,因为阶段监听器不能是CDI组件,所以不能注入其他组件(除了通过el-evaluation);对我来说,一个phaseListener感觉技术性,可以将导航逻辑放入其中。

3)在Seam 2.0中我可以使用“页面操作”来做这样的事情,但似乎这个概念没有进入JSF 2.0

接缝中的

看起来像:

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

真的,JSF 2.0在渲染页面之前没有执行“控制器逻辑”的概念吗?

1 个答案:

答案 0 :(得分:2)

在JSF 2.x中,你可以听到这样的页面事件:

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

这或多或少等同于Seam 2页面操作(尽管你必须过滤掉回发)。您可以使用Seam Faces等CDI扩展进一步增强默认行为。如果您查看文档并查看符合您需求的内容,可能是个好主意......