2016-09-14 130 views
0

我正在使用Wicket 6.x,並且我想實現經典的「維護站點」頁面,根據條件,所有請求都應該重定向到該頁面。將所有請求重定向到Wicket中的特定頁面

但是,我不想在每個頁面上寫入重定向檢查,因爲這將是多餘的。

有沒有一種方法可以截取所有請求,執行我的檢查,並在必要時執行重定向?

回答

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); 
      } 
     } 
    } 
} 
+0

謝謝,雖然這本身會產生一個重定向循環,原因是顯而易見的。如果請求的頁面是維護頁面,我必須在路徑上添加一個檢查以跳過重定向。 此外,請求主頁(http://example.com/)時,這會使我的網站崩潰。仍然必須明白爲什麼 –

+0

我已經用示例更新了我的答案。 –

相關問題