为什么Wicket在tomcat重新启动后重定向到主页?
假设我的应用程序中有三个页面:登录页面、主页和其他页面。 当我第一次打开应用程序时,它会显示SignInPage。授权后,它会在主页上重定向我。之后,我手动打开另一个页面,重新启动servlet容器,然后按F5按钮。wicket再次将我重定向到主页,而不是其他页面。为什么会发生这种情况以及如何避免这种情况 -- 使用为什么Wicket在tomcat重新启动后重定向到主页?,wicket,Wicket,假设我的应用程序中有三个页面:登录页面、主页和其他页面。 当我第一次打开应用程序时,它会显示SignInPage。授权后,它会在主页上重定向我。之后,我手动打开另一个页面,重新启动servlet容器,然后按F5按钮。wicket再次将我重定向到主页,而不是其他页面。为什么会发生这种情况以及如何避免这种情况 -- 使用mountPage方法装入的所有页面。每个页面都是状态完整的,并且有@AuthorizationInstantiation注释。application类扩展Authenticated
mountPage
方法装入的所有页面。每个页面都是状态完整的,并且有@AuthorizationInstantiation注释。application类扩展AuthenticatedWebApplication并重写如下方法:
@Override
protected Class<? extends WebPage> getSignInPageClass() {
return SignInPage.class;
}
@Override
public Class<? extends Page> getHomePage() {
return HomePage.class;
}
(但我从未见过这一页被打开过)
更新:
解决方案是向SignInPage类添加以下代码:
@Override
protected void onBeforeRender() {
if (((AuthenticatedWebSession)Session.get()).isSignedIn()) {
continueToOriginalDestination();
setResponsePage(Application.get().getHomePage());
}
super.onBeforeRender();
}
重新启动servlet容器将为您提供新会话,而不显示哪些页面已过期,所以这就是您被重定向到主页的原因
请检查此项:重新启动servlet容器会为您提供新会话,而不会显示哪些页面已过期,这就是您被重定向到主页的原因
请检查此项:当您重新启动servlet容器时,它将释放其所有会话。在下一个请求中,Wicket检测到这是一个新的http会话,应该将您重定向到登录页面,而不是直接重定向到主页。只有在成功验证后,您才能看到主页
如果使用
Component#重定向到InterceptPage(Page)
+Component.continueToOriginalDestination()
,则在成功验证后,您可以登录到另一页。有关详细信息,请参阅组件.continueToOriginalDestination()的javadoc。重新启动servlet容器时,它会释放所有会话。在下一个请求中,Wicket检测到这是一个新的http会话,应该将您重定向到登录页面,而不是直接重定向到主页。只有在成功验证后,您才能看到主页
如果使用Component#重定向到InterceptPage(Page)
+Component.continueToOriginalDestination()
,则在成功验证后,您可以登录到另一页。有关详细信息,请参阅组件.continuetooriginaldestinition()
的javadoc
@Override
protected void onBeforeRender() {
if (((AuthenticatedWebSession)Session.get()).isSignedIn()) {
continueToOriginalDestination();
setResponsePage(Application.get().getHomePage());
}
super.onBeforeRender();
}