2012-04-04 82 views
1

我目前轰动我的头在哪里把一些授权的东西在我的Java EE 6/JSF 2 webapp: 公共逻辑我有要求,所有的请求特定的cookie应该被重定向到另一个页面。在哪里把过滤器像逻辑在JSF2

我认为3个解决方案:

1)使用servlet 3.0滤波器(@WebFilter) 这个工作,我也可以注入我管理的bean那里,但管理的bean需要访问面孔的ExternalContext,这在过滤器调用时尚未成立,所以我就NPE的呼叫管理豆

2)使用阶段监听器 这种感觉尴尬,因为一个阶段侦听器不能是CDI组件,因此不能注入其他组件(通过el评估除外);对我来说,phaseListener感觉技术上会将导航逻辑放入其中。

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> 

是比较或同等少缝2页动作(你将不得不虽然过滤掉回发)。您可以进一步增强CDI扩展的默认行为,如Seam Faces。也许这是一个好主意,如果你看看文档,看看有什么适合你的需求...

+0

嗨,感谢您的快速回答,不知道这个功能!因此,如果我想确保我的所有jsf页面都被拦截,唯一的方法是确保所有jsf页面都包含该代码段(例如,通过页面合成)? – fujan 2012-04-05 06:41:59

+0

不,不,这当然不是唯一的方法。如果我是你,我会进一步调查过滤选项 - 因为这是许多JSF应用程序的标准要求,所以对于你的问题肯定应该有一个复杂的解决方案。 – 2012-04-05 07:57:27