我使用的是Wicket 6.x,我希望在维护中实现经典的网站#34;页面,应根据条件将所有请求重定向到该页面。
但是,我不想在每个页面上编写重定向检查,因为这样做是多余的。
有没有办法可以拦截所有请求,进行检查,并在必要时从一个地方执行重定向?
答案 0 :(得分:3)
您可以使用IRequestCycleListener#onBeginRequest()+ requestCycle.setResponsePage(MaintainancePage.class)
。
在MyApp#init()中注册您的监听器:getRequestCycleListeners().add(new MaintainanceListener())
。
这是一个可能的解决方案:
public class MaintainanceListener extends AbstractRequestCycleListener {
@Override
public void onRequestHandlerResolved(RequestCycle cycle, IRequestHandler handler) {
super.onRequestHandlerResolved(cycle, handler);
if (handler instanceof IPageRequestHandler && isMaintainanceMode()) {
final Class<? extends IRequestablePage> pageClass = ((IPageRequestHandler) handler).getPageClass();
if (MaintenancePage.class != pageClass) {
final MySession session = MySession.get();
if (session.getUser() != null) {
session.invalidateNow();
}
cycle.setResponsePage(MaintenancePage.class);
}
}
}
}