您可以使用 aRequestCycleListener
来记录PageExpiredException
抛出 a 的时间。
public class ExceptionMapperListener extends AbstractRequestCycleListener {
@Override
public IRequestHandler onException(RequestCycle cycle, Exception ex) {
if (ex instanceof PageExpiredException) {
// Record in session or request cycle
// OR
// Create a RenderPageRequestHandler yourself and add a page parameter
// See DefaultExceptionMapper#internalMap(Exception)
}
return null;
}
}
// In Application#init():
getRequestCycleListeners().add(new ExceptionMapperListener());
原始答案
(保留,因为它仍然可以帮助......)
我自己没有尝试过,因为我不使用 wicket-auth-roles,但尝试AuthenticatedWebApplication#restartResponseAtSignInPage()
用这样的方法覆盖该方法:
if (isSessionExpired()) {
PageParameters params = new PageParameters();
params.add("showSessionExpired", true);
throw new RestartResponseAtInterceptPageException(getSignInPageClass(), params);
} else {
throw new RestartResponseAtInterceptPageException(getSignInPageClass());
}
然后在 SignInPageClass 中,如果存在showSessionExpired
页面参数,则显示所需的消息。
我不确定您是如何实现isSessionExpired()
的,但您似乎已经涵盖了该部分。
或者
根据您实施的方式isSessionExpired()
,也许您可以在 SignInPageClass 中执行以下操作:
if (sessionExpired()) {
session.info("message")
}