0

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

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

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

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

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

4

3 回答 3

1

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

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

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

于 2013-02-07T06:42:10.843 回答
0

试试看!

ctx.getExternalContext().dispatch("login.xhtml");
ctx.responseComplete();
于 2013-12-05T13:59:36.730 回答
0

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

于 2013-02-07T01:26:51.483 回答