java - GWT平台登录+ session 管理

标签 java session gwt gwtp gwt-platform

我是gwt的新手,正在使用gwt创建一个登录页面,我需要会话管理方面的帮助。

这里已经给出了所有答案,说明了如何在服务器端管理会话,
我需要像使用JSP文件一样,在客户端使用会话(浏览器的会话):session.setAttribute("UserName", username);
谁能提供一个清晰完整的示例来说明如何实现这一点(请记住我是gwt的新手)。
我看了这个教程:
http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ
这对我没有帮助,因为它没有解释如何使用浏览器的会话。

谢谢。

最佳答案

“我需要在客户端(浏览器的会话)上完全像使用JSP文件一样使用会话:session.setAttribute(“UserName”,username);“

我想纠正你的误解。以下不是浏览器端代码,也不是浏览器端会话。它是服务器端代码,用于管理服务器端会话信息。

session.setAttribute("UserName", username);

您可以将此服务器端会话信息传输到JSP中的客户端,例如:
<script>
var username = "<%=username%>";
</script>

要么,
<script>
var username = '<%=session.getAttribute("UserName")%>';
</script>

作为一个经验丰富的JSP程序员,您将意识到HTML / Javascript(由JSP生成)与JSP本身之间的分离。由于您在使用JSP时遇到的局限性,所以您选择了GWT。

JSP生成的客户端和GWT生成的客户端之间的相似之处
  • 程序员有时(可能经常)将服务器端代码误认为是客户端代码,反之亦然。就像你一样。
  • 都生成javascript和HTML元素,这些元素将发送到客户端以执行。
  • 无论您使用JSP生成的javascript无法做什么,都无法通过GWT客户端Java源代码完成。
  • 无论需要由JSP生成的客户端代码完成什么,也需要由GWT客户端代码完成。
  • 您可以将会话信息嵌入到HTTP标头,POST或GET参数中。
  • 您需要客户端维护会话信息,大部分以cookie的形式。
  • 在某些情况下,服务器的响应未设置jsessionid cookie。
  • 您的servlet或它的容器可以为JSESSIONID生成http set-cookie头。
  • 由于request.getSession(),servlet可以控制cookie头的创建时间。



  • JSP生成的客户端和GWT生成的客户端之间的区别
  • JSP生成的客户端按请求/响应刷新。这样,您可以针对每个请求/响应在客户端和服务器之间传输更改和数据。
  • GWT生成的客户端对客户端是持久的,不会刷新。出于这个原因,您选择了GWT。
  • 在理解GWT和JSP的编码差异方面,此刷新差异非常关键。
  • JSP中的所有Java代码都是服务器端代码。在JSP中,没有用Java编写的客户端代码。甚至用于生成HTML / javascript的Java代码都是服务器端代码。
  • 所有客户端Java代码都已翻译/编译为Javascript。因此,GWT Java代码实际上是“编译器端”代码。



  • GWT中客户端与服务器之间的通信方式
  • 不要忘了使用Dictionary类客户端代码通过托管文件中定义的Javascript对象将静态设置传输到GWT应用程序。您可以将javascript对象设置为vars,并且在gwt模块加载后,Dictionary类可以读取它们。
  • 不要忘记,您可以使用JSP生成GWT托管文件-这样您就可以创建由不同的Dictionary读数提供的不同行为,您可以针对应用程序的每次调用进行个性化设置。
  • 但是,您不应在主机文件上放置会话ID或身份验证信息。因为即使由JSP动态生成,但在持久GWT客户端上它实际上是静态的。
  • 您可以使用Window.Location.reload()不必要地刷新GWT客户端,以防万一您仍然喜欢JSP的刷新效果。
  • GWT-RPC
  • RequestBuilder
  • RequestFactory
  • REST和REST-RPC
  • 脚本包括(用于跨越SLD-SOP边界)

  • 由于该技术的异步性,所有客户端-服务器通信都需要GWT客户端提供回调。

    查看http://google-web-toolkit.googlecode.com/svn/javadoc/2.4/com/google/gwt/http/client/RequestBuilder.html(或在您的GWT javadoc的个人副本中查看)。

    ...您将可以在其中定义set和get标头。您的服务器端必须与客户端同意使用什么头名称。

    您无需依靠常规的JEE会话来“维护会话”。您可以构建自己的 token 框架。或者使用现有的OAuth或OpenId。

    在各种情况下,您都不会在服务器的响应中设置会话cookie。

    在某些情况下,编写GWT应用程序时可能需要完全放弃使用常规JEE会话。

    您应该考虑使用REST或REST-RPC,因为我正在尝试以蜗牛的速度记录它:http://h2g2java.blessedgeek.com/2011/11/gwt-with-jax-rs-aka-rpcrest-part-0.html

    REST不需要您维护会话cookie。在我看来,GWT与REST-RPC一起使用效果最佳。

    您可以浏览以前的帖子,那里有有关GWT的其他形式的客户端-服务器通讯的说明。

    关于java - GWT平台登录+ session 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9065977/

    相关文章:

    javascript - 从一个表单获取值并在另一个 jsp 中使用它

    php - Codeigniter 3 - 从外部 Codeigniter 安装访问 session

    c# - 限制每个用户的并发 wcf session 数

    java - session 移植

    java - 尽管在使用 RepositoryRestConfiguration.disableDefaultExposure() 时公开了所有方法,但 405 方法不允许

    java - 如何在GWT中从javascript获取返回类型 'any'到java? (泛型类型传递)

    gwt - 如何以像素为单位获取 GWT 对象的高度?

    java - GWT RPC - 每个应用程序多个 RPC 服务

    java - 使用java在html页面中的webelement中查找字符串的(x,y)坐标

    r - 折叠并计算唯一值的数量