JSF重定向不会停止页面呈现

时间:2013-02-06 21:08:14

标签: jsf

我们以非常简单的方式使用JSF。我们所做的只是实现包含一些Java代码的标记。

我已经实现了一个“安全”标记,只要用户没有登录就会将302重定向发送回登录页面:

// make them log in
ctx.getExternalContext().redirect("login.xhtml");
ctx.responseComplete();

麻烦的是redirect()方法不会停止正在呈现的页面的其余部分。页面下方的标签正在执行。这是一个问题,因为如果他们的浏览器忽略重定向,则未登录的用户可以看到他们不应该看到的内容。

如何让responseComplete()完成我认为应该做的事情?

3 个答案:

答案 0 :(得分:1)

在servlet过滤器中实现与登录相关的逻辑总是更好,如下所示:

  1. 为您要保护的网址格式实施过滤器
  2. 在过滤器中,检查用户是否已登录(可能只是检查用户会话中是否存在Username / UserId)
  3. 如果用户未登录,请将用户重定向到基于HTML的登录页面。
  4. 如果用户已登录,请让用户访问资源。
  5. 实现这一点有很多方法(可能比这更好),但这是最基本的方法。

答案 1 :(得分:0)

也许您可以使用标志来验证用户是否已登录 然后,您可以在不想呈现的标记中使用render=#{managedBean.logged}属性 这只是一种解决方法......对于您提供的大量信息无法提供太多帮助。

答案 2 :(得分:0)

试试吧!

ctx.getExternalContext().dispatch("login.xhtml");
ctx.responseComplete();