Google app engine 应用程序引擎登录重定向失败

Google app engine 应用程序引擎登录重定向失败,google-app-engine,authentication,gwt,rest,restful-authentication,Google App Engine,Authentication,Gwt,Rest,Restful Authentication,2011年3月1日,应用程序引擎更改了其登录流,破坏了我的应用程序(请参阅 谷歌集团)。这个问题也出现在这个堆栈中 溢流建议的答案如下: “让应用程序执行重定向。也就是说,createLoginUrl仅在 continue url是应用程序的url。如果您需要将用户发送到 登录后另一个应用程序/主机,则您的应用程序需要执行该重定向“ 及 “在您自己的应用程序上设置重定向处理程序。将其作为目标 并让它向您的 实际目标” 我问这个问题是想了解如何使这项工作更有效的细节。我的应用程序由两个GAE应用程

2011年3月1日,应用程序引擎更改了其登录流,破坏了我的应用程序(请参阅 谷歌集团)。这个问题也出现在这个堆栈中 溢流建议的答案如下:

“让应用程序执行重定向。也就是说,createLoginUrl仅在 continue url是应用程序的url。如果您需要将用户发送到 登录后另一个应用程序/主机,则您的应用程序需要执行该重定向“

“在您自己的应用程序上设置重定向处理程序。将其作为目标 并让它向您的 实际目标”

我问这个问题是想了解如何使这项工作更有效的细节。我的应用程序由两个GAE应用程序组成,一个GWT前端和一个暴露REST的后端 应用程序编程接口。这是当前的流程

用户浏览到,GWT将生成一个 对servlet的JSONP调用

/User servlet检查GAE UserServiceFactory.getUserService() 无效的对于未登录的用户,该值为null,servlet返回 用户未登录的JSONP

GWT代码获取“notlogged in”(未登录)消息,并且

String login = "http://my-back.appspot.com/Login";
Window.open(login, "_self", "");
登录servlet:

public void doActualGet(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException {

    UserService userService = UserServiceFactory.getUserService();
    String url = "http://my-back.appspot.com/LoginRedirectServlet";
    // String url ="http://my-front.appspot.com";  <--------- Before 1 March
    log.info("Auth then redirect to: " + url);
    String redirect = userService.createLoginURL(url);
    resp.setStatus(301);
    resp.setHeader("Location", redirect);
    resp.setHeader("Connection", "close");
}
这通常会导致重定向循环,尽管有时在多次点击初始url后,它仍然有效。我怀疑Window.open附近的代码有问题,但我愿意接受所有建议

谢谢,
Glenn

尝试使用
Window.Location.assign(url)
而不是
Window.open(…)

更新:


可能的问题:浏览器缓存301重定向(例如Chrome)。因为您的登录servlet会产生重定向,如果缓存,这将产生一个循环。尝试使用其他重定向代码:302或307。

尼克·约翰逊抱怨两个应用程序架构,这是值得赞扬的。我从来都不喜欢它。我将war/MyFront.html和war/MyFront/中编译的GWT代码移动到myback项目的war文件中,将所有URL更改为表单并部署。成功了


这只是一个破解,但它证明了这一原理。

重定向循环通过哪些URL?你为什么要使用两个应用程序?这是不必要的复杂,更不用说可能会影响性能了。@Nick Johnson我听说过两个应用程序架构。我继承了它。@Nick Johnson Chrome和Safari在appengine.google.com/\u ah/conflogin?continue=http%3A%2F%2Fmy back.appspot.com%2fLoginDirectServlet&pli=。。。和my-back.appspot.com/LoginRedirectServlet,resp。我没有看到更多的闪现——有没有办法跟踪这些(Firebug?。@Glenn Firebug,或Chrome中的开发工具。这有点离题,但请注意GAE ToS中关于多个应用程序作为一个应用程序工作的第4.4节:谢谢,但这并没有解决重定向问题。再次感谢。改成302也没用。没有宣布最初的更改让我怀疑GAE是否会对这个问题有更多的透明度。一个应用程序架构似乎是一个不错的选择。我不同意,两层架构的一个有效方案是,AppEngine托管一个数据后端,而各种其他站点(不一定在AppEngine上)出于自身的原因托管不同的前端。截至2014年1月,Nick的回答中提到的问题仍未解决或被忽视,因此我们必须继续创造黑客解决方案。
resp.sendRedirect("http://my-front.appspot.com/");