IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

[Avancé] Recopie une session dans un autre client


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 14
    Points : 12
    Points
    12
    Par défaut [Avancé] Recopie une session dans un autre client
    Bonjour,

    J'ai besoin de simuler une authentification pour que l'utilisateur ne s'en rende pas compte. Pour cela j'ai un site internet A sur lequel j'ai un lien vers un autre site B. Ce site B demande une authentification par formulaire en methode post. Je n'ai pas envie que l'utilisateur s'authentifie puisqu'il la deja fait sur le site A et que le mot de passe est identique.

    Pour cela j'ai imaginé une servlet (sur le site A) qui executerai une requete post vers le site B et redirigerai vers la bonne page du site B (welcome.html par exemple).
    Cette methode post passe par l'objet HttpClient de jakarta
    http://jakarta.apache.org/commons/httpclient/

    Cette objet me permet de realiser des methodes get et post et cela me permet de simuler l'authentification facilement. Le Hic c'est que comme j'utilise mon objet httpclient pour m'authentifier, ma servlet et donc mon site A redirige vers ma page mais n'est pas authentifier.

    voici le code de la fonction Post de ma servlet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    		throws ServletException, IOException {
     
    		int status;
     
     
     
    		//		requete get pour initialiser le serveur 		
    		String urlget = getURL(request.getParameter("App"));
    		String urlpost = urlget + request.getParameter("Action");
    		String urlTarget = urlget + request.getParameter("Target");
    		GetMethod get = new GetMethod(urlget);
    		status = client.executeMethod(get);
    		InputStream inget = get.getResponseBodyAsStream(); //pas necessaire
     
    		//		requete post pour s'authentifier 
    		NameValuePair[] data =
    			{
    				new NameValuePair("userName", "ppersonne"),
    				new NameValuePair("password", "ppersonne"),
    				};
    		PostMethod post = new PostMethod(urlpost);
    		post.setRequestBody(data);
    		status = client.executeMethod(post);
    		InputStream inpost = post.getResponseBodyAsStream(); //pas necessaire
     
    		/*String sessionid = "";
    		Cookie[] cookies = client.getState().getCookies();
    		for (int k = 0; k < cookies.length; k++) {
    			Cookie cookie = cookies[k];
    			//out.println("<br><br>cookie "+k+" : name : " + cookie.getName()+" "+cookie.getValue());
    			javax.servlet.http.Cookie cookieServlet =
    				new javax.servlet.http.Cookie(
    					cookie.getName(),
    					cookie.getValue());
    			sessionid = cookie.getValue();
    			response.addCookie(cookieServlet);
    		}*/
     
    	//client.	
    		response.sendRedirect("http://localhost:8080/Login/accueil.jsp");
    		//forward(request, response, );
    	}
    Si quelqu'un a une piste[/url]

  2. #2
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    Ce que tu essais de faire s'appelle le SSO ( Single Sign On) .

    Il y a plein d'API pour ca.


    Google est ton ami.

    Bon courage.

    @+

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Et bien justement j'ai pas trouvé d'API alors si tu en as une ....

  4. #4
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    Tu as deja JAAS, l'API standard de J2EE.


    http://www.google.fr/search?q=Java+Single+Sign+on&ie=UTF-8&hl=fr&meta=

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Je ne pense pas qu'une solution SSO corresponde a ce que je veux. En fait il me faut reelement une servlet qui realise l'authentification et qui fait un ou un sur la page du site que je voulais voir avant de m'authentifier.

    Sur mon exemple j'utilise HTTP client de jakarta mais il possede un context a lui et je voudrai le recopier dans celui de ma servlet pour que IE ou autre se comporte comme si c'etait lui qui s'etait authentifier. Et la je seche

  6. #6
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    SI tes deux appli sont dans le meme conteneur c faisable, sinon tu es obligé de passer par SSO.

    Le contexte n'est pas gardé d'une papli à l'autre, et je ne connait pas de moyen permettant de "passer" une session HTTP vers une autre appli.

    Sauf a stocker login/password ds la session (bad practice) et a relogguer le client en settant des champs ds une autre servlet. Mais c bof.

    @+

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 14
    Points : 12
    Points
    12
    Par défaut YEAAAAAAAAAAAAAAAAAAAAHHHHHH
    C cool j'ai trouvé la reponse a mon probleme. Pour permettre a une session de reconnaitre une authentification realisé par le client de jakarta HttpClient, il suffit de recopier le cookie de session et de modifier un peu l'entete de requete.

    Voila le code correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    public void service(HttpServletRequest request, HttpServletResponse response)
    		throws ServletException, IOException {
    		int status;
     
    		System.out.println("[DelegationServlet] Ma servlet de redirection ");
     
    		// 		// Permet d'observer les flux recus et envoyés
    		// 		System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
    		// 		System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
    		// 		System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "debug");
    		// 		System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "debug");			
     
    		HttpClient client = new HttpClient();
     
    				client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
     
    		NameValuePair[] data =
    			{ new NameValuePair("userName", "jdutronc"), new NameValuePair("password", "jdutronc"), };
     
    		PostMethod post = new PostMethod("http://localhost:8080/Login/login");
    		post.setRequestBody(data);
     
    		Enumeration it = request.getHeaderNames();
    		if (it != null) {
    			String str;
    			while (it.hasMoreElements()) {
    				str = (String) it.nextElement();
    				if (str.equalsIgnoreCase("cookie")
    					|| str.equalsIgnoreCase("referer")
    					|| str.equalsIgnoreCase("content-length"))
    					continue;
    				// System.out.println("<request>" + str + " - " + request.getHeader(str));
    				post.setRequestHeader(str, request.getHeader(str));
    			}
    		}
     
    		//post.setRequestHeader();
    		post.setRequestHeader("referer", "http://localhost:8080/Login/index.jsp");
     
    		//post.setParameter()
    		status = client.executeMethod(post);
    		InputStream inpost = post.getResponseBodyAsStream();
    		//		BufferedReader in2 = new BufferedReader(new InputStreamReader(inpost));
    		//
    		//		StringBuffer sb2 = new StringBuffer();
    		//		String s2 = in2.readLine();
    		//		while (s2 != null) {
    		//			sb2.append(s2);
    		//			s2 = in2.readLine();
    		//		}
     
    		HttpState state = client.getState();
    		org.apache.commons.httpclient.Cookie[] httpClientCookies = state.getCookies();
     
    		if ((httpClientCookies.length > 0) && (httpClientCookies[0] != null)) {
    			org.apache.commons.httpclient.Cookie httpClientCookie = httpClientCookies[0];
     
    			javax.servlet.http.Cookie delegateCookie =
    				new javax.servlet.http.Cookie(httpClientCookie.getName(), httpClientCookie.getValue());
     
    			// Transfert des informations entre cookie
    			delegateCookie.setComment(httpClientCookie.getComment());
    			// delegateCookie.setDomain( httpClientCookie.getDomain() );
     
    			// TODO : Quelle est la correspondance entre MaxAge et ExpiryDate ? Si elle existe.
    			// delegateCookie.setMaxAge( httpClientCookie.getExpiryDate() );
     
    			delegateCookie.setPath(httpClientCookie.getPath());
    			delegateCookie.setSecure(httpClientCookie.getSecure());
    			delegateCookie.setVersion(httpClientCookie.getVersion());
     
    			response.addCookie(delegateCookie);
    		}
     
    		response.sendRedirect("http://localhost:8080/Login/accueil.jsp");
    	}
    Voila merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recopier une donnée dans une autre colonne si, similitude
    Par Cyrille2766 dans le forum Access
    Réponses: 16
    Dernier message: 01/02/2007, 14h02
  2. Appeler une fonction dans un autre cadre !
    Par rich25200 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/11/2005, 13h01
  3. Réponses: 12
    Dernier message: 27/06/2005, 19h06
  4. Réponses: 5
    Dernier message: 05/04/2005, 11h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo