0
我正在使用Wicket 6.x,並且我想實現經典的「維護站點」頁面,根據條件,所有請求都應該重定向到該頁面。將所有請求重定向到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/)時,這會使我的網站崩潰。仍然必須明白爲什麼 –
我已經用示例更新了我的答案。 –