将所有请求重定向到 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);
            }
        }
    }
}