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

Я обновил свой ответ на примере. –