Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cookie

Integration d'un cookie

    16 septembre 2011 à 11:26:35

    Bonjour à tous amis zéros,

    Je fais appel à votre savoir illimité aujourd'hui car j'ai actuellement de grandes difficultés à intégrer un système de cookie.
    Je vous explique la situation j'ai commencé un stage il y a maintenant 2 semaines afin de développer et améliorer une plateforme intranet faites en java. La plupart des fonctionnalités sont intégrés ce qui me rend la modification du code source difficile (surtout étant débutant en java).
    J'ai lu la partie du cours sur le JEE traitant des cookie mais j'ai beaucoup de mal à l'adapter à mon site. J'ai également utiliser mon ami gogole( o_O ) pour trouver une solution à mon problème sans succès.
    En gros la connexion se fait via une petite fenetre qui apparait demandant les identifiants. Il ne s'agit pas d'un fichier jsp (contrairement au cours)mais d'une classe java que voici
    package fr.managetool.applet;
    import java.net.CookieManager;
    import java.util.HashMap;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.ArrayList;
    import java.util.List;
    import javax.swing.JCheckBox;
    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JPasswordField;
    import javax.swing.JTextField;
    import javax.swing.SwingConstants;
    import javax.swing.Timer;
    
    import fr.managetool.api.AfptException;
    import fr.managetool.api.AfptSession;
    import fr.managetool.applet.connection.AfptIGuiControler;
    import fr.managetool.ressources.Ressources;
    
    /**
     * Panel pour afficher la demande de login dans un dialog à part.<br>
     * Utilisé pour afficher un petit header
     *
     */
    public class AfptLoginPanelSmall extends JPanel implements ActionListener {
    
    	/** internal */
    	private static final long serialVersionUID = 1L;
    
    	/** nom compte de login */
    	private JTextField user;
    
    	/** mot de passe compte de login */
    	private JPasswordField pass;
    /** champs maintenir la connexion */
    	private JCheckBox auto_connect;
    	/** Label informant dl'utilisateur sur l'état de sa demande */
    	private JLabel lbInformation;
    
    	/** Bouton de connexion */
    	private JButton btConnection;
    
    	/** Le controleur en mode web */
    	private AfptIGuiControler webGuiController;
    
    	/** La liste des controleurs */
    	private List<AfptILoginControler> listControler;
    
    	private PingThread pingThread;
    
    	private static final String DISCONNECT_LABEL = Ressources.getString("PanelLogin.Disconnect");
    	private static final String CONNECT_LABEL = Ressources.getString("PanelLogin.Connect");
    
    	/**
    	 * Initialise contenu du panel login.<br>
    	 * 
    	 * @param webGuiController Le controleur en mode web
    	 */
    	public AfptLoginPanelSmall(AfptIGuiControler webGuiController) {
    		super();
    		this.webGuiController = webGuiController;
    		this.listControler = new ArrayList<AfptILoginControler>();
    	
    	    
    	    	
    		
        	
    	}
    
    	/**
    	 * Placement des composants graphiques
    	 */
    	public void initGui() {
    
    		setLayout(new BorderLayout());
    		setFocusable(false);
    
    		btConnection = new JButton(CONNECT_LABEL);
    		btConnection.addActionListener(this);
    
    		user = new JTextField();
    		user.setPreferredSize(new Dimension(100, 20));
    		user.setMinimumSize(new Dimension(100, 20));
    		String userBName = "";
    		try {
    			userBName = System.getProperty("user.name");
    		} catch (Exception err) {
    			System.out.println("Erreur récupération user.name");
    		}
    		user.setText(userBName);
    		
    		pass = new JPasswordField();
    
    
    		lbInformation = new JLabel(" ");
    		lbInformation.setHorizontalAlignment(SwingConstants.CENTER);
    		lbInformation.setHorizontalTextPosition(SwingConstants.CENTER);
    		lbInformation.setForeground(Color.RED);
    
    		this.setLayout(new GridBagLayout());
    		GridBagConstraints c = new GridBagConstraints();
    		this.add(btConnection, c);
    		c.gridy = 1;
    		this.add(lbInformation, c);
    
    		AfptSession session = webGuiController.getCurrentSession();
    	
    		if (session != null) {
    			btConnection.setText(DISCONNECT_LABEL);
    			lbInformation.setForeground(Color.black);
    			lbInformation.setText(session.getUsername());
    		}
    		
    	}
    
    	/**
    	 * Démarrage du thread de ping
    	 */
    	public void startPing() {
    		if (pingThread == null || !pingThread.isAlive()) {
    			pingThread = new PingThread();
    			pingThread.start();
    		}
    	}
    
    	/**
    	 * Méthode qui fournit un panneau permettant au l'utilisateur de se connecter. Il contient également le label
    	 * permettant d'afficher un message d'infromation
    	 * 
    	 * @return Le panneau créé
    	 */
    	private JPanel getPanelLogin() {
    
    		JPanel panelLogin = new JPanel(new GridBagLayout());
    
    		JLabel lbluser = new JLabel(Ressources.getString("PanelLogin.UserName")); //$NON-NLS-1$
    		JLabel lblpass = new JLabel(Ressources.getString("PanelLogin.Password")); //$NON-NLS-1$
    		
    		GridBagConstraints c = new GridBagConstraints();
    		
    		c.fill=GridBagConstraints.BOTH;
    
    		c.gridy = 0;
    		c.gridx = 0;
    		panelLogin.add(lbluser, c);
    		
    		c.gridx = 1;
    		panelLogin.add(user, c);
    
    		c.gridy = 1;
    		c.gridx = 0;
    		panelLogin.add(lblpass, c);
    		c.gridx = 1;
    		panelLogin.add(pass, c);
    		
    		JCheckBox autoconnect= new JCheckBox("Rester connecter");
    		
    		c.gridy = 2;
    		panelLogin.add(autoconnect, c);
    		return panelLogin;
    	
    	}
    
    	/**
    	 * Action de connection ou de déconnection.<br>
    	 * 
    	 * @param e évènement utilisateur
    	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
    	 */
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource().equals(btConnection)) {
    			AfptSession session = webGuiController.getCurrentSession();
    			if (session != null) {
    				for (AfptILoginControler controler : listControler) {
    					controler.logOut();
    				}
    			} else {
    				JOptionPane pane = new JOptionPane(getPanelLogin(), JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
    				JDialog dia = pane.createDialog(this, "Login");
    				dia.addWindowListener(new WindowAdapter() {
    					@Override
    					public void windowActivated(WindowEvent ev) {
    						Timer timer = new Timer(50, new ActionListener() {
    							public void actionPerformed(ActionEvent ev) {
    								pass.requestFocus(false);
    							}
    						});
    						timer.setRepeats(false);
    						timer.start();
    					}
    				});
    
    				dia.setVisible(true);
    				Object selectedValue = pane.getValue();
    				if (((Integer) selectedValue).intValue() == JOptionPane.OK_OPTION) {
    					try {						
    					
    						AfptSession newSession = webGuiController.verifyLogin(user.getText(), new String(pass.getPassword()) );
    						if (newSession != null) {
    							btConnection.setText(DISCONNECT_LABEL);
    							lbInformation.setForeground(Color.black);
    							lbInformation.setText(newSession.getUsername());
    							for (AfptILoginControler controler : listControler) {
    								controler.logIn();
    							}
    						} else {
    							lbInformation.setForeground(Color.red);
    							lbInformation.setText(Ressources.getString("PanelLogin.ConnectionFailed"));
    						}
    					} catch (AfptException e1) {
    						lbInformation.setForeground(Color.red);
    						lbInformation.setText(Ressources.getString("PanelLogin.ConnectionFailed"));
    						e1.printStackTrace();
    					}
    				}
    			}
    
    		}
    		pass.setText("");
    		this.revalidate();
    		this.repaint();
    	}
    
    	/**
    	 * Méthode d'ajout d'un controleur sur les actions utilisateurs
    	 * 
    	 * @param controler Le controleur
    	 */
    	public void addControler(AfptILoginControler controler) {
    		this.listControler.add(controler);
    	}
    
    	/**
    	 * Classe qui lance dans un thread à part le ping vers le serveur Elle va informer l'ensemble des controleurs si le
    	 * statut du serveur change.
    	 */
    	private class PingThread extends Thread {
    
    		/** Le time out en seconde */
    		private static final int TIME_OUT = 5000;
    
    		/** Booleen pour arreter le thread */
    		private boolean stopThread = false;
    
    		/** Statut actuel du serveur */
    		private boolean serverStatus = false;
    
    		/**
    		 * Méthode qui stoppe le thread
    		 */
    		@SuppressWarnings("unused")
    		public void stopThread() {
    			stopThread = true;
    		}
    
    		public void run() {
    			boolean newServerStatus = false;
    
    			while (!stopThread) {
    				try {
    					// on récupère l'état du serveur
    					newServerStatus = webGuiController.ping();
    					// Si celui ci change, on informe les controleurs;
    					if (serverStatus != newServerStatus) {
    						for (AfptILoginControler controler : listControler) {
    							controler.serverStatusChanged(newServerStatus);
    						}
    						serverStatus = newServerStatus;
    					}
    					sleep(TIME_OUT);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		}
    	}
    
    	/**
    	 * Notifie la déconnexion au panel
    	 */
    	public void disconnect() {
    		btConnection.setText(CONNECT_LABEL);
    
    		lbInformation.setText("");
    	}
    }
    


    Voila, donc je vois pas trop comment faire (interface, classe ou autre...) je suis un peu perdu (pour pas dire complètement :o ).
    Je souhaiterais que si un utilisateur clique sur maintenir la connexion le cookie soit crée avec le login, le password et la valeur de l'auto_connect aussi je pense.
    Ensuite que si l'utilisateur a demander l'auto connexion les données du cookie soit affichés dans les champs de connexion (assez logique :D )

    Si vous pouvez m'aider, me mettre sur les pistes ou même juste compatir avec moi ça serait déjà au top.

    Merci d'avance et si vous avez besoin de codes sources supplémentaires demandez moi.
    • Partager sur Facebook
    • Partager sur Twitter

    Cookie

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown