将所有请求重定向到Wicket中的特定页面
问题描述:
我正在使用Wicket 6.x,并且我想实现经典的“维护站点”页面,根据条件,所有请求都应该重定向到该页面。将所有请求重定向到Wicket中的特定页面
但是,我不想在每个页面上写入重定向检查,因为这将是多余的。
有没有一种方法可以截取所有请求,执行我的检查,并在必要时执行重定向?
答
您可以使用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);
}
}
}
}
谢谢,虽然这本身会产生一个重定向循环,原因是显而易见的。如果请求的页面是维护页面,我必须在路径上添加一个检查以跳过重定向。 此外,请求主页(http://example.com/)时,这会使我的网站崩溃。仍然必须明白为什么 –
我已经用示例更新了我的答案。 –