Jsf 2 在JSF2中,在何处放置类似过滤器的逻辑
我目前正在绞尽脑汁,想在我的Java EE 6/JSF 2 webapp中为一些授权内容提供一个通用逻辑: 我有一个要求,所有带有特定cookie的请求都应该重定向到另一个页面 我考虑了3种解决方案: 1)使用servlet 3.0过滤器(@WebFilter) 这是可行的,我也可以在那里注入我的托管bean,但是托管bean需要访问faces externalContext,它在过滤器调用时还没有设置,所以我得到了NPE调用托管bean的消息 2)使用相位侦听器 这感觉很尴尬,因为相位侦听器不能是CDI组件,因此不能注入其他组件(通过el评估除外);对我来说,一个相位监听器感觉需要将导航逻辑放入其中 3)在Seam 2.0中,我可以使用“页面操作”来处理类似的事情,但这个概念似乎没有融入JSF 2.0中 在seam中,这看起来像:Jsf 2 在JSF2中,在何处放置类似过滤器的逻辑,jsf-2,java-ee-6,cdi,Jsf 2,Java Ee 6,Cdi,我目前正在绞尽脑汁,想在我的Java EE 6/JSF 2 webapp中为一些授权内容提供一个通用逻辑: 我有一个要求,所有带有特定cookie的请求都应该重定向到另一个页面 我考虑了3种解决方案: 1)使用servlet 3.0过滤器(@WebFilter) 这是可行的,我也可以在那里注入我的托管bean,但是托管bean需要访问faces externalContext,它在过滤器调用时还没有设置,所以我得到了NPE调用托管bean的消息 2)使用相位侦听器 这感觉很尴尬,因为相位侦听器不
<page view-id="/admin/*.jsf">
<action execute="#{authenticator.checkAccess()}" />
</page>
JSF 2.0真的没有在呈现页面之前执行“控制器逻辑”的概念吗?在JSF 2.x中,您可以听到这样的页面事件:
<f:metadata>
<f:event type="javax.faces.event.PreRenderViewEvent" listener="#authenticator.checkAccess()}" />
</f:metadata>
这或多或少相当于Seam 2页面操作(不过您必须过滤掉回发)。您可以使用CDI扩展进一步增强默认行为,如。如果您看一下文档,看看什么适合您的需要,这可能是一个好主意。嗨,jan,谢谢您的快速回答,我不知道该功能!因此,如果我想确保所有jsf页面都被截获,唯一的方法就是确保所有jsf页面都包含这段代码(例如,通过页面合成)?不,这肯定不是唯一的方法。如果我是你的话,我会进一步研究过滤器选项——因为这是许多JSF应用程序的标准要求,所以肯定会有一个复杂的解决方案来解决你的问题。