我们使用JSF的方式非常简单。我们所做的只是实现包含一些Java代码的标签。
我已经实现了一个"安全"标签,每当用户没有登录时,它就会发送302重定向回登录页面:
// make them log in
ctx.getExternalContext().redirect("login.xhtml");
ctx.responseComplete();
问题是redirect()方法无法停止页面的其余部分。页面下方的标签正在被执行。这是一个问题,因为如果未登录的用户让浏览器忽略重定向,他们可能会看到不该看到的东西。
我如何让responseComplete()做我认为应该做的事情?
在servlet过滤器中实现与登录相关的逻辑总是更好的,如下所示:
- 为要保护的URL模式实现筛选器
- 在过滤器中,检查用户是否已登录(可以只检查用户会话中是否存在Username/UserId)
- 如果用户未登录,请将用户重定向到基于HTML的登录页面
- 如果用户已登录,请允许用户访问资源
有很多方法(可能比这更好)可以实现这一点,但这是最基本的方法。
也许您可以使用标志来验证用户是否已登录。
然后,可以在不想渲染的标记中使用render=#{managedBean.logged}
属性
这只是一个变通办法。。。你提供的信息实在帮不了多少忙。
试试吧!
ctx.getExternalContext().dispatch("login.xhtml");
ctx.responseComplete();