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 :

Récupérer les infos provenant d'un service de messagerie (gmail, yahoo, etc.)


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut Récupérer les infos provenant d'un service de messagerie (gmail, yahoo, etc.)
    Bonjour

    Je suis en train de créer une application J2EE. J'ai un formulaire qui permet à l'utilisateur de renseigner son nom, prénom, email .... Bref il lui permet de créer son compte. Après l'enregistrement dans la base de données, je voudrais envoyer un lien d'activation à l'utilisateur dans sa boite mail. Ce lien permettra de confirmer que l'adresse mail qu'il a renseignée existe bel et bien, et qu'elle lui appartient. Mon problème est le suivant:

    1. Avant d'envoyer le lien, je voudrais enregistrer les données de l'utilisateur temporairement, c'est-à-dire que, à part les champs nom, prénom etc..., je voudrais créer un champ "statut_activation" qui prend une valeur "oui" ou "non". Lorsque l'utilisateur clique sur "enregistrer", la valeur du champ "statut_activation" sera "non" par défaut. Donc ça veut dire que le compte n'est pas activé. Après avoir reçu le mail , lorsqu'il aura cliqué sur le lien d'activation, je vais mettre à jour la valeur du champ "statut_activation" qui sera "oui". Dans ce cas le compte est activé.
    J'aimerais donc savoir si le principe est bon.

    2. Lorsque l'utilisateur aura cliqué sur le lien d'activation, comment je fais pour le reconnaitre puisque les infos proviendront d'un service de messagerie comme gmail ou yahoo, et non d'une page jsp de mon application, c'est-à-dire comment faire un request.getParameter pour récupérer les infos provenant de gmail ou de yahoo par exemple.

    Merci

  2. #2
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Bonsoir,

    1. Le principe me semble bon, "statut_activation" pourrait être un boolean.

    2. Dans le lien (ou le bouton) envoyé par mail, tu pourrais mettre l'url-pattern d'une servlet de ton application et quelques paramètres qui permettront d'identifier l'utilisateur qui vient de valider son inscription.

    web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <servlet>
            <servlet-name>ConfirmRegistration</servlet-name>
            <servlet-class>be.mon.paquetage.servlets.ConfirmRegistration</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>ConfirmRegistration</servlet-name>
            <url-pattern>/validateRegister.do</url-pattern>
        </servlet-mapping>
    MailService.java
    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
    public class MailService {
        ...
        private static final String VALIDATION_ADDRESS = "http://localhost:8080/nom_application/validateRegister.do?";
        private static final String emailConfirmInscriptionBody = "Veuilez cliquer sur ce bouton pour confirmer votre inscription ";
        ...
        public void sendInscriptionConfirmation(Personne newUser) throws MessagingException{
            try {
            ...
            String emailBody = emailConfirmInscriptionBody.concat("<a href=" + VALIDATION_ADDRESS 
                        + "email=" + newUser.getEmail()
                        + "&validationKey=" + newUser.getValidationKey() // ça peut être tout ce que tu veux SAUF le mot de passe en clair
                        + "><button>Activez votre inscription</button></a>"); // le bouton est moche, suis d'accord :D
            ...
            } catch (MessagingException mex) {
                mex.printStackTrace();
            }
        }
    }

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut
    Merci pour ta réponse, je suis sur la bonne voie.

    Juste une question concernant la clé d'activation: son contenu pourrait-il être par exemple une combinaison du ID et de l'email de l'utilisateur, que je vais ensuite chiffrer? c'est-à-dire faire:

    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
    String validationKey = newUser.getId()+newUser.getEmail();
     
    ConfigurablePasswordEncryptor passwordEncryptor = new    ConfigurablePasswordEncryptor();
        passwordEncryptor.setAlgorithm( ALGO_CHIFFREMENT );
        passwordEncryptor.setPlainDigest( false );
        String validationKeyChiffre = passwordEncryptor.encryptPassword(validationKey);
     
    try {
            ...
            String emailBody = emailConfirmInscriptionBody.concat("<a href=" + VALIDATION_ADDRESS 
                        + "email=" + newUser.getEmail()
                        + "&validationKey=" + validationKeyChiffre  // ça peut être tout ce que tu veux SAUF le mot de passe en clair
                        + "><button>Activez votre inscription</button></a>"); // le bouton est moche, suis d'accord :D
            ...
            }

  4. #4
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Bonjour,

    Oui, ça pourrait être une donnée (ou combinaison de données) cryptée(s), capable(s) à identifier l'utilisateur de façon unique.

    Je dirais qu'il vaudrait mieux de faire le cryptage dans le contrôleur de la classe Utilisateur et sauvegarder la valeur dans la base de données pour vérification lors de la validation de l'inscription. Une fois la validation réussie, effacer la clé de validation de la base de données (histoire d'éviter les collisions), car elle ne doit servir qu'une seule fois.

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Le plus simple serait d'utiliser une clé primaire incrémentale, elle ne signifie rien, ne donne aucune information à quiconque tomberait dessus.

    Pour le reste, la suggestion de Mishulyna utilisant un lien vers une servlet est bonne et simple à mettre en œuvre mais elle suppose que ton serveur est accessible depuis internet (DMZ). S'il s'agit d'un réseau d'entreprise, ça ne fonctionnera pas.

    Sinon, tu as la possibilité de répondre à une adresse de messagerie et d'analyser la réponse via l'api mail de java... Là, plus de soucis d'accessibilité
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Bonjour OButterlin,

    Citation Envoyé par OButterlin Voir le message
    Le plus simple serait d'utiliser une clé primaire incrémentale, elle ne signifie rien, ne donne aucune information à quiconque tomberait dessus.
    Vous voulez dire comme un numéro de client ? Est-ce possible d'avoir deux clés primaires incrémentales sur une table (la première étant l'Id) ?

    Citation Envoyé par OButterlin Voir le message
    S'il s'agit d'un réseau d'entreprise, ça ne fonctionnera pas.
    Est-ce possible que quelqu'un de l'extérieur se crée tout seul un compte sur une application qui tourne sur un serveur d'entreprise, avec une adresse mail autre que celle "interne" à l'entreprise ?

    Désolée pour ces questions bêtes...

  7. #7
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut
    J'ai finalement décidé d'utiliser la Class UUID car il parait qu'elle génère un ID unique.

    Donc je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UUID validationKey= UUID.randomUUID();
    Et je sauvegarde cette clé temporairement dans la table Utilisateur comme tu m'as dit.

    Est ce que tu me conseilles l'usage de la Class UUID ?

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Ce que j'avais à l'esprit était une colonne de ce type, inutile de créer autre chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    create table maTable (
       uid Integer NOT NULL as identity,
       ...
       primary key (uid)
    );
    Un nombre aléatoire à une probabilité non nulle de ressortir, ce serait dommage que 2 clients aient malencontreusement eu le même numéro pour répondre...

    Pour l'autre question, concernant l'envoi d'un mail de l'extérieur vers une boite mail d'entreprise, ça dépend de la protection de cette dernière.
    Dans certains cas, les entreprises "verrouillent" l'accès à la boite mail, ou du moins, compliquent leur accès... ça peut être un problème...
    Ceci dit, c'est un peu couillon de verrouiller une adresse mail quand on demande une réponse.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    En survolant la javadoc, c'est le constructeur qui me met en difficulté :
    UUID(long mostSigBits, long leastSigBits)
    Constructs a new UUID using the specified data.


    C'est peut-être que j'aime trop avoir le contrôle, j'utiliserais plutôt la solution proposée par OButterlin, un identifiant unique sans rapport avec l'id de l'utilisateur.

Discussions similaires

  1. Récupérer les infos d'un alias
    Par Oluha dans le forum Bases de données
    Réponses: 2
    Dernier message: 25/04/2005, 10h10
  2. Réponses: 3
    Dernier message: 28/10/2004, 08h39
  3. Delphi - récupérer les infos d'un utilisateur
    Par jlf dans le forum Débuter
    Réponses: 2
    Dernier message: 26/06/2004, 11h34
  4. Récupérer les infos sur un fichier audio
    Par Halleck dans le forum Windows
    Réponses: 13
    Dernier message: 17/04/2004, 18h39
  5. Réponses: 6
    Dernier message: 23/12/2003, 15h30

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