2012-03-20 4 views
0

J'essaye d'implémenter la connexion asynchrone à la webapp JEE6 en utilisant javascript et XMLHttpRequest. Je devrais être en mesure de faire un appel asynchrone avec XMLHttpRequest à/app/j_security_check et analyser la réponse d'une manière ou d'une autre afin que je puisse montrer à l'utilisateur une boîte de dialogue avec "Login Failed" ou "Login success". J'utilise Glassfish 3.1.1.Connexion asynchrone de l'application web Java EE dans Glassfish 3.1.1

Quelque chose que j'ai essayé, mais la réponse est toujours nulle. J'ai un login.jsp qui détient le formulaire de connexion et le script suivant:

function submitLogin(formName) { 
    var urlAction = "/app/j_security_check"; 
    var client; 
    var dataString; 
    if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 
     client = new XMLHttpRequest(); 
    } else { // IE6, IE5 
     client = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    client.onreadystatechange = function() { 
     var response = client.responseText; // this is always null 

        /* ALERT THE DIALOG HERE ACCORDING TO RESPONSE? */ 
    }; 

    var form = document.forms[formName]; 
    var username = form.elements["j_username"].value; 
    var password = form.elements["j_password"].value; 
    dataString = "j_username=" + username + "&j_password=" + password; 
    client.open("POST", urlAction, true); 
    client.setRequestHeader("Content-type", 
      "application/x-www-form-urlencoded"); 
    client.send(dataString); 
} 

Ma question est, est-ce possible et comment le mettre en œuvre?

Editer: Le problème ici semble provenir de la redirection que Java Security applique après une connexion réussie/échouée. Il semble toujours rediriger la page, peu importe ce que je fais avec javascript. J'ai également essayé les méthodes ajax de jQuery sans succès.

Répondre

0

je peut-être quelque chose de semblable cela vous aidera:

 //Get a XMLHttpRequest object. 
     //The XMLHttpRequest specification defines an API that provides 
     //scripted client functionality for transferring data between a client and a server. 
     function getXMLObject() //XML OBJECT 
     { 
      var xmlHttp = false; 
      try { 
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP") // For Old Microsoft Browsers 
      } 
      catch (e) { 
      try { 
       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP") // For Microsoft IE 6.0+ 
      } 
      catch (e2) { 
       xmlHttp = false // No Browser accepts the XMLHTTP Object then false 
      } 
      } 
      if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { 
      xmlHttp = new XMLHttpRequest();  //For Mozilla, Opera Browsers 
      } 
      return xmlHttp; // Mandatory Statement returning the ajax object created 
     } 

     var xmlhttp = new getXMLObject(); //xmlhttp holds the ajax obj 

     /* 
     * Use this method to send data to server using ajax. 
     * Sent attribute name is : attribute 
     * Sent attribute value is : attribute:val 
     */ 
     function ajaxFunction(attribute,val, url) { 
      if(xmlhttp) { 
      var param = attribute+"="+attribute+":"+val; 
      param +="&tiers_payant="+document.getElementsByName("tiers_payant")[0].value; //Add the value to send here 
      xmlhttp.open("POST",url,true); 
      xmlhttp.onreadystatechange = handleServerResponse; 
      xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
      xmlhttp.send(param); 
      } 
     } 

     /** 
     * When client received response from server, 
     * set the inner HTML of the page with the one returned by server. 
     */ 
     function handleServerResponse() { 
      if (xmlhttp.readyState == 4) { 
      if(xmlhttp.status == 200) { 
       // DO what you want with : xmlhttp.responseText; 

      } 
      else { 
       document.getElementById("erreur").innerHTML="Le serveur le répond pas."; 
       //alert("Error during AJAX call. Please try again"+xmlhttp.status); 
      } 
      } 
     } 
+0

Cela ne semble pas fonctionner. La page redirige toujours après la connexion et je ne peux pas sembler faire quoi que ce soit à ce sujet dans le Javascript natif ou jQuery. –

+0

@Antionio Pouvez-vous mettre à jour votre question avec ce que vous avez essayé? Avez-vous ajouté 'if (client.readyState == 4) { if (client.status == 200) {' dans la méthode 'onreadystatechange' comme je le suggère? –

+0

Nous avons effectivement abandonné l'idée et sommes allés sans connexion asynchrone. –

Questions connexes