为什么 Wicket 在 tomcat 重新启动后重定向到主页?
Why Wicket redirects to the home page after tomcat restarting?
假设我的应用程序中有三个页面:SignInPage、HomePage 和 AnotherPage。
当我第一次打开应用程序时,它会显示 SignInPage。授权后,它会将我重定向到主页。之后,我手动打开 AnotherPage,重新启动 servlet 容器,然后按 F5 按钮。 wicket 再次将我重定向到 HomePage,而不是 AnotherPage。为什么会发生这种情况以及如何避免这种情况?
--
所有页面都使用 mountPage
方法装载。每个页面都是有状态的,并且有 @AuthorizeInstantiation 注释。应用程序 class 扩展了 AuthenticatedWebApplication 并覆盖了如下方法:
@Override
protected Class<? extends WebPage> getSignInPageClass() {
return SignInPage.class;
}
@Override
public Class<? extends Page> getHomePage() {
return HomePage.class;
}
此外,在配置中我有以下行:
getApplicationSettings().setPageExpiredErrorPage(ErrorSessionExpiredPage.class);
(但我从未见过打开此页面)
更新:
解决方法是在SignInPage中添加如下代码class:
@Override
protected void onBeforeRender() {
if (((AuthenticatedWebSession)Session.get()).isSignedIn()) {
continueToOriginalDestination();
setResponsePage(Application.get().getHomePage());
}
super.onBeforeRender();
}
重新启动 servlet 容器会为您提供新会话,但不会提供哪些页面已过期的信息,因此这就是您被重定向到主页的原因。
当您重新启动 servlet 容器时,它会丢失所有会话。在下一个请求中,Wicket 检测到这是一个新的 http 会话,应该将您重定向到 SignInPage,而不是直接到 HomePage。只有在成功验证后,您才能看到主页。
如果您使用Component#redirectToInterceptPage(Page)
+ Component.continueToOriginalDestination()
,那么您可以在验证成功后登陆AnotherPage。有关详细信息,请参阅 Component.continueToOriginalDestination()
的 javadoc。
假设我的应用程序中有三个页面:SignInPage、HomePage 和 AnotherPage。 当我第一次打开应用程序时,它会显示 SignInPage。授权后,它会将我重定向到主页。之后,我手动打开 AnotherPage,重新启动 servlet 容器,然后按 F5 按钮。 wicket 再次将我重定向到 HomePage,而不是 AnotherPage。为什么会发生这种情况以及如何避免这种情况?
--
所有页面都使用 mountPage
方法装载。每个页面都是有状态的,并且有 @AuthorizeInstantiation 注释。应用程序 class 扩展了 AuthenticatedWebApplication 并覆盖了如下方法:
@Override
protected Class<? extends WebPage> getSignInPageClass() {
return SignInPage.class;
}
@Override
public Class<? extends Page> getHomePage() {
return HomePage.class;
}
此外,在配置中我有以下行:
getApplicationSettings().setPageExpiredErrorPage(ErrorSessionExpiredPage.class);
(但我从未见过打开此页面)
更新:
解决方法是在SignInPage中添加如下代码class:
@Override
protected void onBeforeRender() {
if (((AuthenticatedWebSession)Session.get()).isSignedIn()) {
continueToOriginalDestination();
setResponsePage(Application.get().getHomePage());
}
super.onBeforeRender();
}
重新启动 servlet 容器会为您提供新会话,但不会提供哪些页面已过期的信息,因此这就是您被重定向到主页的原因。
当您重新启动 servlet 容器时,它会丢失所有会话。在下一个请求中,Wicket 检测到这是一个新的 http 会话,应该将您重定向到 SignInPage,而不是直接到 HomePage。只有在成功验证后,您才能看到主页。
如果您使用Component#redirectToInterceptPage(Page)
+ Component.continueToOriginalDestination()
,那么您可以在验证成功后登陆AnotherPage。有关详细信息,请参阅 Component.continueToOriginalDestination()
的 javadoc。