在GWT框架中显示Google登录页面

Showing Google login page in GWT Frame

本文关键字:登录 Google 显示 GWT 框架      更新时间:2023-09-26

我正在开发一个使用Google登录的GWT应用程序。为此,我有一个Java servlet,它基于UserService.createLogin()函数将用户重定向到Google登录页面。可以通过"/login"URL访问所讨论的Java servlet。以前,每当用户单击应用程序中的登录按钮时,我都会打开如下窗口:

Window.open("/login", "Bla", "");

然后,当登录过程成功时(UserService.getCurrentUser() != null),我在Java servlet中执行如下重定向,

response.sendRedirect("/success.html");

success.html文件包含一个简单的行,其中onLoad()执行以下操作,

<body onLoad="window.opener.loginSucceededCallback();window.close();"/>

这会导致原始窗口关闭并调用JavaScript回调函数'loginSucceededCallback',我在调用windows .open()的GWT类中注册了该函数。

我在一个单独的窗口中显示Google登录,因为我不希望重新加载GWT应用程序。但是,如果我能将谷歌登录页面嵌入GWT应用程序中,而不是在弹出窗口(或单独的选项卡)中显示它,那就更好了。为此,我考虑使用Frame()或NamedFrame()对象,它们允许显示外部页面。我可以在这样的框架中成功显示Google登录页面,但是当成功登录(在Google)时,我无法获得success.html中的JavaScript代码来正确调用GWT代码中的回调函数。没有明确的"窗口"或"窗口"。开瓶器的目标,至少我认为。我的JavaScript知识也是有限的,没有一个现有的论坛帖子让我看到了光明…

有没有人知道如何将这些代码片段链接在一起,以便GWT客户端注意到服务器端的成功登录?我可以用FormPanel和Frame()做点什么吗?

谢谢,拉尔夫

你可以这样写

  frame.addLoadHandler(new LoadHandler() {
        @Override
        public void onLoad(LoadEvent event) {
            if(frame.getUrl().equals("your link here"))
                               loginSucceededCallback();
        }
    });