您可以使用RequestCycleListener 记录何时抛出PageExpiredException。
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")
}