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中的客户端,例如:

  

要么,

  

作为一名经验丰富的JSP程序员,您将意识到HTML / Javascript(由JSP生成)与JSP本身之间的脱钩。 对于您在JSP中遇到的限制是您转向GWT的原因。

JSP生成的客户端和GWT生成的客户端之间的相似之处

  • 偶尔(可能经常)程序员将服务器端代码误认为是客户端代码,反之亦然。 就像你做的那样。

  • 两者都生成发送到客户端以执行的javascript和HTML元素。

  • 无论您使用JSP生成的javascript无法做什么,GWT客户端Java源同样无法完成。

  • 无论JSP生成的客户端代码需要做什么,也需要通过GWT客户端代码来完成。

  • 您可以在HTTP标头,POST或GET参数中嵌入会话信息。

  • 您需要客户端维护会话信息,主要是以cookie的forms。

  • 在某些情况下,jsessionid cookie不是由服务器的响应设置的。

  • 您的servlet或其容器可以为JSESSIONID生成http set-cookie标头。

  • servlet可以控制何时创建cookie头 – 由于request.getSession()。

JSP生成的客户端和GWT生成的客户端之间的区别

  • 每个请求/响应刷新JSP生成的客户端。 因此,您可以为每个请求/响应在客户端和服务器之间传输更改和数据。

  • GWT生成的客户端对客户端是持久的而不是刷新的。 因此,您正在转向GWT。

  • 这种刷新差异对于理解GWT编码的差异非常重要。

  • JSP中的所有Java代码都是服务器端代码。 在JSP中,没有用Java编写的客户端代码。 甚至用于生成HTML / javascript的Java代码也是服务器端代码。

  • 所有客户端Java代码都被翻译/编译为Javascript。 所以GWT Java代码实际上是“编译器端”代码。

GWT中客户端 – 服务器之间的通信方式

  • 不要忘记使用Dictionary类客户端代码将静态设置传输到主机文件中定义的Javascript对象的GWT应用程序。 您可以将javascript对象设置为vars,并且在加载gwt模块后,Dictionary类可以读取它们。

  • 不要忘记您可以使用JSP生成GWT托管文件 – 这样您就可以创建不同的词典阅读所提供的不同行为,您可以为每次调用应用程序进行个性化。

  • 但是,您不应将会话ID或身份validation信息放在托管文件上。 因为即使由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会话来“维护会话”。 您可以设计自己的令牌框架。 或者使用现有的,如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。

您可以浏览之前的post,其中有关于GWT的其他forms的客户端 – 服务器通信的解释。

如果您的意思是在客户端控制HttpSession的实例,那么您无法在客户端控制会话,因为它位于服务器端。 要控制会话,您必须使用异步回调或其他技术调用服务器端。 阅读本教程: 在GWT中与服务器通信在服务器端实现中,您可以将任何属性设置为会话

 HttpSession session = this.getThreadLocalRequest().getSession(); session.setAttribute("UserName", userName); 

或者,如果您指的是客户端Web会话 ,则可以使用Cookie控制它们。

没有浏览器会话这样的东西。 这是你可以做的:

  1. 实现ping服务器的GWT RPC,从服务器检索会话超时。
  2. 在客户端启动计时器,该计时器在超时期间运行。
  3. 每次发生服务呼叫时重置计时器。