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

JWS Java Discussion :

Génération de fichier jnlp suivant la session de l'utilisateur


Sujet :

JWS Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Génération de fichier jnlp suivant la session de l'utilisateur
    Bonjour,

    Je reprends un projet existant (une application web nommé AnimAlgo disponible sur Internet), qui a été développé avec le framework tapestry 3.
    Cette application comporte 2 applets que je souhaite utilisable par Java Web Start, mais le problème est que je souhaite passer des paramètres à ces applets Java Web Start suivant ce que l'utilisateur a choisit (suivant sa session).
    J'ai donc crée une servlet qui envoit à l'utilisateur un fichier jnlp crée de toute pièce, avec en paramètre (tag <argument> du fichier jnlp) les données propres à l'utilisateur en question (données de l'objet Visit).
    Tapestry utilise des objets Visit pour y stocker les données propres à chaque utilisateur (donc propre à chaque session).

    Ma servlet étant complétement découplé de Tapestry, je dois crée un lien entre les deux me permettant d'associer à une requête d'un utilisateur, l'objet Visit de Tapestry associé à cet utilisateur, pour celà je récupére dans ma servlet le Cookie de l'utilisateur qui a le nom JSESSIONID et comme valeur l'ID de la session de l'utilisateur.
    Mais pas moyen de récupérer ce Cookie (crée par Tapestry pour les sessions), pourtant dans l'envirronement (mon code Java associé à Tapestry) Tapestry je peut récupérer ce Cookie.
    En créant mon propre cookie que se soit dans ma servlet ou dans l'environnement Tapestry, j'arrive bien à le récupérer.
    J'ai remarqué en regardant mes cookies côté client un différence, le cookie crée par Tapestry à un Path "/ani_dev" alors que ceux que je crée ont un Path "/ani_dev/".
    Serais-ce à cause de cette différence que je ne peut pas récupérer ce cookie dans ma servlet?

    Est ce qu'un connaisseur de Tapestry pourrait m'aider?
    Il n'y aurai-t-il pas un autre moyen de récupérer l'objet Visit de l'utilisateur plus facilement?

    Merci.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Passage de sessions aux applications Java Web Start
    En fait, je veux pouvoir identifier l'utilisateur de l'application Java Web Start et faire l'association avec sa session sur le serveur.
    Quelle information pourrais-je récupérer du client pour m'identifier sur le serveur sans passer par une demande de login/pass, sachant que je n'ai pas accès aux cookies du client dans l'environnement de l'application Java Web Start?

  3. #3
    Membre habitué Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Points : 178
    Points
    178
    Par défaut
    Salut,

    Alors je ne connais absolument pas Tapestry mais, pour un pb similaire, j'ai créé une applet (signée) qui récupère le login et qui va chercher un fichier sur le disque perso de l'utilisateur afin de l'authentifier sans saisie du login/pwd (c'est l'applet qui récupère ces infos et qui les transmet).

    Ci dessous le code de mon applet qui récupère donc le login, un fichier pwd, les transmet à une servlet qui check que c'est bon. La servlet me retourne soit un code d'erreur soit un identifiant que je transmet à une méthode en javascript...
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
     
    import java.applet.Applet;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.io.BufferedInputStream;
    import java.io.DataInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.ObjectOutputStream;
    import java.io.ObjectInputStream;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
     
    import netscape.javascript.*;
     
    public class Security extends Applet {
     
    	protected String error  = null;
    	protected String userId = null;
     
    	/**
             * This is the default constructor
             */
    	public Security() {
    		super();
    	}
     
    	/**
             * This method initializes this
             */
    	@Override
    	public void init() 
    	{
    		setSize(1, 1);
    		try
    		{
    			String login = System.getProperty("user.name");
    			String keyFileName = getParameter("keyfile.name");
    			String keyFilePath = getParameter("keyfile.path");
    			String servlet     = getParameter("servlet");
     
    			int arrlen = 10000;
    			byte[] infile = new byte[arrlen];
    			File keyFile = new File(keyFilePath, keyFileName);
     
    			try {
    				FileInputStream fis = new FileInputStream(keyFile); 
    				BufferedInputStream bis = new BufferedInputStream(fis);
    				DataInputStream dis = new DataInputStream(bis);
    				try {
    					// Read the key file
    					int filelength = dis.read(infile);
    					String filestring = new String(infile, 0, filelength);
    					Object[] data = new String[2];
    					data[0] = login;
    					data[1] = filestring;
     
    					// Transmit the login/key file to the servlet
    					URL urlServlet=new URL(servlet); 
    					URLConnection connexion = urlServlet.openConnection(); 
    					connexion.setDoOutput(true); 
    					// Send data to the servlet
    					ObjectOutputStream sortieObjet= new ObjectOutputStream(connexion.getOutputStream()); 
    					sortieObjet.writeObject(data);
    					sortieObjet.flush();
    					// Get servlet response
    					ObjectInputStream entreeObjet= new ObjectInputStream(connexion.getInputStream());
    					try
    					{
    						Object[] results = (Object[])entreeObjet.readObject();
    						if(results.length!=2)
    							error = "Invalid servlet response length";
    						else
    						{
    							boolean isUserIdentified = ((Boolean)results[0]).booleanValue();
    							if(!isUserIdentified)
    								error = (String)results[1];
    							else
    								userId = (String)results[1];
    						}
    					}
    					catch(Exception e)
    					{
    						error = "Invalid servlet response: "+e.getMessage();
    					}
    				}
    				catch(IOException iox) {
    					error = "I/O Error: "+iox.getMessage();
    				}
    				finally
    				{
    					if(dis!=null)
    						dis.close();
    					if(bis!=null)
    						bis.close();
    					if(fis!=null)
    						fis.close();
    				}
    			}
    			catch (FileNotFoundException fnf) {
    				error = "Key file not found";
    			}
    			catch(Exception e)
    			{
    				error = "Error: "+e.getMessage();
    			}
    		}
    		catch(Exception e)
    		{
    			error = "Error: "+e.getMessage();
    		}
    		Object[] args = new String[1];
    		if(error!=null)
    		{
    			// If there is an error return the status to the jsp identification page
    			JSObject win = JSObject.getWindow ( this );
    			args[0] = error;
    			win.call("fail", args);
    		}
    		else if(userId!=null)
    		{
    			JSObject win = JSObject.getWindow ( this );
    			args[0] = userId;
    			win.call("success", args);
    		}
                    // else The servlet ensure the redirection in all the other cases 
    	}
     
    }
    En espérant avoir pu t'aider...

    Manu

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour ta réponse, je voudrais savoir pour stocker ton mot de passe la première fois tu l'as passe en attribut param du code html qui inclut l'applet ou c l'applet qui demande par un JTextField le mot de passe pour le stocker sur disque pour les prochaines authentification?

    En fait c'est le fait de passer de la technologie Applet à la technologie Java Web Start qui m'empêche de passer des paramètres variables (suivant le choix de l'utilisateur sur le site web) qui me fait perdre les avantages de Java Web Start (incremental download/update principalement).

    Merci.

  5. #5
    Membre habitué Avatar de manube
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2004
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 180
    Points : 178
    Points
    178
    Par défaut
    Salut,
    En fait, j'envoie le fichier/mot de passe par email aux utilisateurs qu'ils doivent stocker à l'emplacement défini par les paramètres "keyfile.name" et "keyfile.path" avant de se connecter à l'appli.
    Sinon pour passer de l'applet à Java Web Start, à priori ça ne peux pas se faire via javascript, mais par contre tu peux peut-être communiquer via une servlet? Ou initialiser le JWS à partir de la servlet?
    Désolé mais je ne connais pas suffisamment cette techno pour t'aider d'avantage.
    A+

Discussions similaires

  1. [Sunopsis] Génération de fichier .csv
    Par aurelbcn dans le forum ODI (ex-Sunopsis)
    Réponses: 2
    Dernier message: 12/12/2005, 18h21
  2. [FPDF] génération de fichiers PDF
    Par Laura dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 15/11/2005, 23h35
  3. Génération de fichier CODA
    Par Bernard123 dans le forum Access
    Réponses: 8
    Dernier message: 28/10/2005, 14h02
  4. [DOM] Génération dynamique fichier xml
    Par Fabouney dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 03/10/2005, 09h45

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