将所有请求重定向到 Wicket 中的特定页面
Redirect all requests to a particular page in Wicket
我正在使用 Wicket 6.x,我想实现经典的 "site under maintenance" 页面,所有请求都应根据条件重定向到该页面。
但是,我不想在每个页面上都写重定向检查,因为那是多余的。
有没有办法从一个地方拦截所有请求、进行检查并在必要时执行重定向??
您可以使用 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);
}
}
}
}
我正在使用 Wicket 6.x,我想实现经典的 "site under maintenance" 页面,所有请求都应根据条件重定向到该页面。
但是,我不想在每个页面上都写重定向检查,因为那是多余的。
有没有办法从一个地方拦截所有请求、进行检查并在必要时执行重定向??
您可以使用 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);
}
}
}
}