我正在敲打我的脑袋,在我的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在渲染页面之前没有执行“控制器逻辑”的概念吗?
答案 0 :(得分:2)
在JSF 2.x中,你可以听到这样的页面事件:
<f:metadata>
<f:event type="javax.faces.event.PreRenderViewEvent" listener="#authenticator.checkAccess()}" />
</f:metadata>
这或多或少等同于Seam 2页面操作(尽管你必须过滤掉回发)。您可以使用Seam Faces等CDI扩展进一步增强默认行为。如果您查看文档并查看符合您需求的内容,可能是个好主意......