带有cookie和历史的GWT MVP

时间:2014-10-21 19:23:50

标签: gwt cookies mvp browser-history

我正在使用GWT和MVP制作一个网络应用程序。 我试图使用cookies,但我遇到了历史问题。 如果用户有cookie并登录到Web应用程序,应用程序会自动记录他,这很棒!现在由于某种原因,他有能力点击退格并返回历史记录!虽然在他登录时它是空的!

登录时的地址:... html?gwt.codesvr = 127.0.0.1:9997 #mainpage 地址由于某种原因保存在那里并弹出单击退格:... html?gwt.codesvr = 127.0.0.1:9997。

代码:

   public void go(HasWidgets container) {
        this.container = container;
        if (History.getToken().isEmpty()) {
            fetchCookie();

          }
          else {
            History.fireCurrentHistoryState();
          }
        }

      protected void fetchCookie()
      {
            String sessionID = Cookies.getCookie("username");
            if (sessionID == null)
            {
                History.newItem("login");
            } 

            else
            {
               .....
              }

现在让我们说我不关心这个问题(但我确实如此)并在点击退格后尝试与网络应用互动,我得到一个例外: 捕获异常:此小部件的父级未实现HasWidgets。

所以我发布实现Composite的主页视图,并有一个SplitLayoutPanel:

  Panel.add(books);
  vPanel.add(chapters);
  vPanel.add(textButton);

  splitPanel = new SplitLayoutPanel();
  assetPicPanel = new VerticalPanel();
  titleAssetPic = new Label();
  assetPicPanel.add(titleAssetPic);
  vPanel.add(assetPicPanel);

  assetVidPanel = new VerticalPanel();
  titleAssetVid = new Label();
  assetVidPanel.add(titleAssetVid);
  vPanel.add(assetVidPanel);

  assetAudioPanel = new VerticalPanel();
  titleAssetAudio = new Label();
  assetAudioPanel.add(titleAssetAudio);
  vPanel.add(assetAudioPanel);

  assetTextPanel = new VerticalPanel();
  titleAssetText = new Label();
  assetTextPanel.add(titleAssetText);
  vPanel.add(assetTextPanel);

  splitPanel.addWest(vPanel, 300);

  assetLocationPanel = new VerticalPanel();

  splitPanel.add(page);
  page.setWidth("50%");
  RootLayoutPanel rp = RootLayoutPanel.get();
  rp.add(splitPanel);
  initWidget(rp);

1 个答案:

答案 0 :(得分:0)

您应该在入口点类的onModuleLoad()方法中设置一个cookie - 它只在第一次加载应用程序时运行一次。绝对没有理由在每个导航操作上检查此cookie。

如果您担心在应用程序仍处于打开状态时可能需要踢出您的用户,则应该通过从RPC调用中抛出LoginException来执行此操作。无论如何,您必须检查每个RPC调用的凭据 - 否则任何人都可以在不打开您的应用程序的情况下使用它们。