2011-01-27 1 views
3

J'ai peu de difficulté à concevoir une application GWT. J'essaie de développer l'application RIA (avec un seul widget principal, appelons-le principal). D'abord, l'utilisateur doit être connecté. Voici ma façon de le faire, mais il y a un problème, vous verrez.GWT: Problème avec l'architecture de l'application

  1. Afficher les composants de connexion sur le panneau racine
  2. Si la connexion est successfull (base de données de chèques), montrent un widget principal
  3. Widget est ajouté au panneau racine

Tout fonctionne, mais quand vous appuyez sur Actualiser il montre à nouveau les composants de connexion ... Tout se passe dans la méthode onModuleLoad.

Comment devrais-je repenser cette logique? Je voudrais laisser l'utilisateur connecté (cela signifie que RootPanel tiendra le widget principal) pour un certain temps.

Répondre

3

http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ

Comment se rappeler les connexions

Notre système connexion donc manque beaucoup une fonction utile: Pour l'instant, il oblige les utilisateurs à se connecter à nouveau à chaque fois.

Nous pouvons utiliser des cookies pour permettre au navigateur Web de l'utilisateur de se «souvenir» de la connexion. En GWT, pour définir le cookie (que vous feriez faire juste après votre code GWT reçoit la réponse que nous avons fait dans le précédent fragment de code ):

String sessionID = /*(Get sessionID from server's response to your login request.)*/; 
final long DURATION = 1000 * 60 * 60 * 24 * 14; //duration remembering login. 2 weeks in this example. 
Date expires = new Date(System.currentTimeMillis() + DURATION); 
Cookies.setCookie("sid", sessionID, expires, null, "/", false); 

Maintenant, vous pouvez exécuter le code suivant ! juste après votre EntryPoint commence exécution:

String sessionID = Cookies.getCookie("sid"); 
if (sessionID != null) checkWithServerIfSessionIdIsStillLegal(); 
else displayLoginBox(); 

Rappelez-vous - vous ne devez jamais compter sur le idSession envoyé à votre serveur dans l'en-tête cookie ; regardez uniquement l'ID de session que votre application GWT envoie explicitement en la charge utile des messages sur votre serveur .

Je ne suis pas sûr de ce que la façon dont votre application GWT communication mis en œuvre avec le service de connexion, mais si vous voulez voir un autre exemple, je suivais l'exemple ici:

http://code.google.com/webtoolkit/doc/latest/tutorial/appengine.html#user

Bien qu'il utilise Google App Engine en tant que service d'authentification backend, je pense qu'il est suffisamment générique pour être adapté à tout serveur supportant le côté serveur GWT RPC et disposant de services d'authentification.

1

Vous avez besoin d'une sorte de support côté serveur pour le faire.

Par exemple, lorsque l'utilisateur se connecte, marquez-le dans la session côté serveur. Dans onModuleLoad(), appelez le serveur pour vérifier si l'utilisateur est connecté avant d'afficher le formulaire de connexion.

D'autres problèmes liés à la pression Actualiser peuvent être résolus avec history tokens.

+0

Pouvez-vous spécifier un type de support côté serveur? Quelque chose basé sur GWT f.e? – Xorty