【问题标题】:Why Wicket redirects to the home page after tomcat restarting?为什么tomcat重启后Wicket会重定向到首页?
【发布时间】:2020-12-28 19:57:57
【问题描述】:

假设我的应用程序中有三个页面:SignInPage、HomePage 和 AnotherPage。 当我第一次打开应用程序时,它会显示 SignInPage。授权后,它会将我重定向到主页。之后,我手动打开另一个页面,重新启动 servlet 容器,然后按 F5 按钮。 wicket 再次将我重定向到 HomePage,而不是 AnotherPage。为什么会发生这种情况以及如何避免这种情况?

--

所有使用mountPage 方法挂载的页面。每个页面都是有状态的并且有@AuthorizeInstantiation 注解。应用程序类扩展了 AuthenticatedWebApplication 并覆盖了如下方法:

@Override
protected Class<? extends WebPage> getSignInPageClass() {
    return SignInPage.class;
}

@Override
public Class<? extends Page> getHomePage() {
    return HomePage.class;
}

另外,在配置中我有以下行:

getApplicationSettings().setPageExpiredErrorPage(ErrorSessionExpiredPage.class);

(但我从来没有看到这个页面打开过)

更新:

解决方法是在SignInPage类中加入如下代码:

@Override
protected void onBeforeRender() {
    if (((AuthenticatedWebSession)Session.get()).isSignedIn()) {
        continueToOriginalDestination();
        setResponsePage(Application.get().getHomePage());
    }
    super.onBeforeRender();
}

【问题讨论】:

    标签: wicket


    【解决方案1】:

    当您重新启动 servlet 容器时,它会丢失所有会话。在下一个请求中,Wicket 检测到这是一个新的 http 会话,应该将您重定向到 SignInPage,而不是直接重定向到 HomePage。只有在成功验证后,您才能看到主页。

    如果你使用Component#redirectToInterceptPage(Page) + Component.continueToOriginalDestination(),那么你可以在认证成功后登陆AnotherPage。有关详细信息,请参阅 Component.continueToOriginalDestination() 的 javadoc。

    【讨论】:

      【解决方案2】:

      重新启动 servlet 容器会为您提供新会话,而无需知道哪些页面已过期,这就是您被重定向到 HomePage 的原因。

      请检查:https://users.wicket.apache.narkive.com/3OtYz8xj/pageexpiredexception-not-working-on-session-expired-wicket-1-5-11

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-13
        • 1970-01-01
        • 1970-01-01
        • 2016-07-15
        • 1970-01-01
        • 2023-03-06
        • 2016-01-15
        • 1970-01-01
        相关资源
        最近更新 更多