gwt -平台登录+会话管理



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

所有的答案都已经给出了,解释了如何在服务器端管理会话,我需要使用会话在客户端(浏览器的会话)完全像JSP文件:session.setAttribute("UserName", username);

可以提供一个如何实现这一点的清晰完整的例子(记住我是gwt的新手)。我看了这个教程:http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ这对我没有帮助,因为它没有解释如何使用浏览器的会话。

谢谢。

"我需要在客户端使用session(浏览器的session),就像使用JSP文件一样:session。setAttribute("用户名",用户名);"

我希望纠正你的误解。以下不是浏览器端代码,也不是浏览器端会话。这是服务器端代码,管理服务器端会话信息。
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头。

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

.

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托管文件——这样您就可以创建不同的行为,提供不同的字典读数,您可以为您的应用程序的每次调用个性化。

  • 但是,您不应该将会话id或身份验证信息放在托管文件上。因为尽管它是由JSP动态生成的,但在持久GWT客户机上实际上是静态的。

  • 您可以使用windows . 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配合使用效果最好。

您可以在那里浏览以前的帖子,那里有关于其他形式的客户端-服务器与GWT通信的解释。

如果你的意思是在客户端控制HttpSession的实例,简单地说,你不能在客户端控制会话,因为它存在于服务器端。为了控制会话,您必须使用异步回调或其他技术调用服务器端。阅读本教程:在GWT中与服务器通信在服务器端实现中,您可以将任何属性设置为session

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

或者如果你指的是客户端web会话,你可以用cookie来控制它们。

没有浏览器会话这回事。你可以这样做:

  1. 实现一个GWT RPC, ping服务器,从服务器获取会话超时。
  2. 在客户端启动一个计时器,在超时期间运行。
  3. 每次发生服务调用时重置定时器

最新更新