2016-09-14 16 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

例で私の答えを更新しました。 –

関連する問題