0

我有一个 Wicket (6.0) 应用程序。有一个 LoginPage 和一个 OverviewPage。LoginPage 包含一个表单,用户可以在其中进行身份验证。身份验证后,用户被重定向到 OverviewPage。

LoginPage 的一个特殊之处如下:

public void isUserLoggedIn() {

    if (getSession().isSignedIn()) {

        setResponsePage(new OverviewPage());

    }
}

如果用户正确登录并想进入 LoginPage,他将被自动重定向到 OverviePage。

我尝试了这个并在浏览器栏中输入了 url, "http://anyserver/login/" 正如我所料,我将被重定向到 OverviewPage。

但是,我的问题是:如果我登录 (LoginPage),我将被重定向到 OverviewPage。如果我按下浏览器的后退按钮,我将被重定向到 LoginPage?!但为什么?直接 url 像预期的那样工作,但后退按钮不是。

我还添加了以下内容:

        response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-Control", "no-cache, max-age=0, must-revalidate, no-store");

所以有一个新的要求。我已经用 FireBug 检查过了。

但是 LoginPage 的逻辑只有在有人输入 url 时才会执行。后退按钮不执行逻辑。

有任何想法吗?

4

2 回答 2

0

您的重定向逻辑可能是页面(或onInitialize())构造函数的一部分。如果您返回页面,则调用页面的构建。顺便说一句,您的浏览器中可能有一个页面实例的 url(您可以通过检查'?n'url 末尾的存在来查看)。您可以尝试将此逻辑放在onConfigure()页面中。我没有对此进行测试,所以我不确定它是否会起作用。

于 2013-07-09T09:05:25.147 回答
0

因为 loginpage 是实际的前一页。setResponsePage 设置新页面的内容,就像您的用户单击链接一样。

Wicket 缓存了页面的内容。如果您使用后退按钮,浏览器会要求提供页面的准确的先前版本(实际上由附加到 URL 的 ? 指定),因此 wicket 会提供该页面。

如果您想发送一个实际的重定向,这样就不会发生这种情况,请使用

throw new RestartResponseException(OverviewPage.class);

或者它的一个变体让你创建页面。您还应该在已登录的情况下发送此信息。

于 2013-07-09T12:50:04.707 回答