2013-02-06 99 views
0

我们以非常简单的方式使用JSF。我们正在做的是实现包含一些Java代码的标签。JSF重定向不会停止页面呈现

我已经实现了“安全”标签发送302重定向回到登录页面当用户没有登录:

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

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

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

+0

http://stackoverflow.com/questions/8480100/how-implement-a-login-filter-in-jsf – elciospy

回答

0

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

1

它总是更好地实现登录相关的逻辑在Servlet过滤器,象下面这样:

  1. 实施要确保
  2. 在过滤器的URL模式过滤器,检查用户是否已登录(可能只是检查用户会话中是否存在用户名/用户ID)
  3. 如果用户未登录,则将用户重定向到基于HTML的登录页面。
  4. 如果用户登录,让用户访问资源。

有很多方法(可能会比这更好)来实现这一点,但这是最基本的方法。

+0

是,更好地利用由JSF –

+0

提供faces-config.xml中的这是我们原来是这样做的。麻烦的是不应该保护一些路径,如/login.xhtml和/ images/*。保持清单很丑陋。通过这个方案,我可以将一个标签放在所有安全页面的通用标头中。 – ccleve

+0

您只能保护您的(动态)页面并显示安全内容。保护静态资源,如图像,CSS,JS可能会被跳过。在过滤器中,添加一个条件以绕过登录页面。 – Apurv

0

试试吧!

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