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

谢谢,虽然这本身会产生一个重定向循环,原因是显而易见的。如果请求的页面是维护页面,我必须在路径上添加一个检查以跳过重定向。 此外,请求主页(http://example.com/)时,这会使我的网站崩溃。仍然必须明白为什么 –

+0

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