1

我目前正在努力在我的 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 真的没有在呈现页面之前执行“控制器逻辑”的概念吗?

4

1 回答 1

2

在 JSF 2.x 中,您可以像这样监听页面事件:

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

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

于 2012-04-04T10:29:45.957 回答