8
votes

Partage d'objet de session entre différentes applications Web

ok c'est le problème

J'ai une application Java en cours d'exécution au sommet de Apache Tomcat et j'ai également cette autre application avec son propre fichier de guerre exécuté sur le même serveur.

Maintenant, je veux authentifier l'utilisateur une fois et transmettre cette session à l'autre application.

Nous pouvons dire que nous pouvons dire la session de domaine croisée partage sur la même apache Tomcat .. Comment devrais-je y aller ...?

merci


6 commentaires

Voulez-vous transmettre le fait qu'ils sont authentifiés, ou le contenu de la session?


Essayez OpenSSO pour une solution plus générale


Voir aussi: Stackoverflow.com/Questtions/665941/...


Cet article connexe peut également être utile: Jee-bpel-soa.blogspot.com/2009/06/...


Le message de blog mentionné ci-dessus a déménagé à Lukaszbudnik.blogspot. com / 2009/06 / ...


Pouvez-vous publier quelle solution vous avez fini par utiliser?


3 Réponses :


3
votes

Créer un jeton unique pour la session et mettre dans une table DB que les deux applications ont accès.
Stocker le jeton dans le cookie des utilisateurs.
Cela évite la question de partage de session et est également plus évolutive.


3 commentaires

Et comment allez-vous authentifier avec la deuxième application à l'aide de cette approche - en faisant semblant une demande à j_security_check ? Cela ne semble pas vraiment propre. S'il vous plaît, rendez-vous aussi sur «plus évolutif».


Les deux applications utilisent le jeton de la cookie pour rechercher la session de l'utilisateur dans la base de données partagée. L'état de synchronisation entre les serveurs n'est pas aussi évolutif que des serveurs apatrides. L'état de la session devrait être dans le cookie et la base de données.


Je ne parle pas de l'état de la session. Comment allez-vous authentifier votre utilisateur? Qui va mettre le directeur, que va-t-il arriver à la sécurité déclarative, etc.



4
votes

0 commentaires

1
votes

Voici comment vous pouvez le coder que je le faisais pour un autre peu de travail que je travaille sur ....

première mise à jour p>

/etc/tomcatx/server.xml p>

pour chaque contexte qui nécessite d'être partagé p> xxx pré>

Ajouter le crosscontext = TRUE TAG à chaque contexte désormais pour le code pour créer et envoyer des informations de session partagées p>

................................................. / p>

Le code pour modifier IT .. P>

//Context 1 : Sending Servlet Add below
//So this is AuthSuccess - Within The master context doing authentication
//Given examples of vectors sessions and request from
//All the information now allows you to put those new
// provider and providerName session values back into AuthSuccess
//that is executed on other Context -
//In theory once it authenticates you can just store the output i.e.
//email/display/logged in and put it into other context - or...
//as it is process list etc on other context


//Vector example
Vector roles=new Vector();
roles.addElement("COOOGOOO");

 //Redirect url
 String redir="http://mydomain.com/solutions2/AuthSuccess";

 //Get session id
 String sessionid = session.getId();

HttpSession session = req.getSession(true);
session.putValue("provider2","provider_session_info");
session.putValue("providerName2","providerName");
 //Start new shared servlet context
 ServletContext myContext = getServletContext();

//Shared sessioname is obvious and it sends the session id followed by:


// objects,string,sessions,whatever that matches other end
myContext.setAttribute("MYSHAREDSESSION", sessionid);
myContext.setAttribute("GOOFY",roles);

//Send session directly
myContext.setAttribute("SharedSession",session);

//send HttpRequest
myContext.setAttribute("SharedRequest",request);

   //Redirect to new context/domain/subdomain
  Redirect(out,red,response);

//-------------------------------------------------------------

// Now within ther servlets of solution2 within 
// AuthSuccess call back the session info
// and process as per normal

 //Add this to new context path 
   //So it looks in the first context now
  ServletContext firstOne = getServletContext().getContext("/servlets");

  //returns previous session id
  String jsessionid= (String)firstOne.getAttribute("MYSHAREDSESSION");

  //Returns Session as was
  Session ProviderName=(Session)firstOne.getAttribute("SharedSession");
  //Returns session strings we need
  String g1=(String)ProviderName.getValue("provider2");
  String g2=(String)ProviderName.getValue("providerName2");
  pout +="--- "+g1+""+g2;

 //Grab previous request to do req processing if required
 HttpServletRequest nrequest=(HttpServletRequest)firstOne.getAttribute("SharedRequest");

//retrieve vector
Vector goo= (Vector)firstOne.getAttribute("MYVECTOR");
 if (goo.size()>0) {
  for (int a=0; a";

  }
 } 


0 commentaires