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

Struts 1 Java Discussion :

Utilisation du jeton [FAQ]


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut Utilisation du jeton
    dans une application Struts, après avoir valider une page contenant un formulaire ... un page de résultat s'affiche
    Problème : un certain temps s'écoule entre l'affichage des 2 pages (si les champs du formulaire sont valides)

    donc l'utilisateur peut etre tenter de valider à nouveau le formulaire ou rafraichir de la page

    mon but étant que si l'utilisateur effectue l'une des 2 actions ci-dessus, celle-ci ne soit pas prise en compte puisque le serveur est déjà en train de traiter le 1er post, et donc je souhaite simplement attendre la page résultat du 1er post ...

    je pense utiliser resetToken(), isTokenValid(), saveToken() mais je ne sais pas trop comment les positionner dans le corps de la méthode execute() de l'action qui post le formulaire ... et obtenir l'effet escompté !

    Merci

  2. #2
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Points : 737
    Points
    737
    Par défaut
    Tu peut effectivement faire comme ça, mais c'est compliqué.

    Deux solution simple sont :
    - utilisation du javascript pour désactiver ton bouton submit pour éviter que l'utilisateur clique deux fois dessus.
    - utilisation juste d'un boolean isProcessed pour dire que l'action est en cours (pas besion d'un véritable jeton si tu n'as pas plusieurs processus qui se suivent, un jeton étant pour faire de l'ordonnancement de processus)

  3. #3
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut
    bonjour,

    merci pour le réponse
    je ne souhaite pas utiliser la 1ère solution : désactivation java script du bouton de validation
    par contre pour la 2ème solution : peux tu détailler svp ? à savoir :
    - où (ré-)initialiser la variable boolean isProcessed ?
    - dans la méthode execute() de l'action, que renvoyer comme ActionForward si isProcessed est à true ? (c'est à dire que le 1er post a déjà été fait et qu'on attend l'affichage de la page résultat)

  4. #4
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Points : 737
    Points
    737
    Par défaut
    Ce que je ne comprend pas, c'et pourquoi tu veut réinitialiser la variable, doit tu faire un traitement cyclique?

    Le problème du que renvoyé dans ton action est effectivement génant : une requête s'effectue dans un thread, donc en rechargeant la page, l'utilisateur arrive dans une autre requête et donc n'aurra plus accés à la requête d'avant qui sera perdue.

    Seul le javascript te permet d'empecher deux click sur un bouton, à partir du moment où l'utilisateur clique deux fois sur un bouton (ou pire, recharge une page qui lance un traitement), c'est foutue, tu ne pourra plus retourner sur l'action précédente.

    Donc, le plus simple c'est de rediriger vers une page de confirmation ou quelque chose dans ce style. Ne sachant pas exactement ce que tu veut fair eje e peut t'aider plus.

  5. #5
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut
    ce type de situation ne me parait pas exceptionnel :

    le formulaire envoie une demande d'autorisation de prélèvement (avec un certain montant) à la banque via un site marchand et un réponse d'acceptation ou de refus est retournée au client :
    browser client <-> site marchand <-> banque

    le temps écoulé entre la demande et la réponse est de quelques secondes ...
    et donc si l'utilisateur valide une 2ème fois le formulaire (ou rafraichit la page en cours), le risque est qu'il y est un 2ème prélèvement (du même montant), etc ...


    c'est bien évidemment exclu !!!
    la solution javascript ne me parait pas fiable, une solution côté serveur me parait plus appropriée

  6. #6
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Dans le cas :

    browser client <-> site marchand <-> banque

    Il semble logique de passer par un bloquage coté base. car la session peut etre traitre ( un simple Ctrl+N peu te faire plein de surprise).
    utilises donc deux champs suplémentaires (isValide, isSolded).
    le premier est mis a true lors du premier clique, le deuxieme lors du paiement.

    Le javascript est une bonne solution pour "éviter" que l'utilisateur ne le fasse malencontreusement, mais cela n'est effectivement pas suffisant.
    Etre c'est etre relatif.

  7. #7
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Points : 737
    Points
    737
    Par défaut
    Je suis d'accord avec jakouz.

    En fait il faut faire les deux :
    - JavaScript pour minimiser les chances d'erreur
    - lock en base de donnée (ou en session) selon le model proposé par jakouz.

    Mais effectivement, ce n'est pas une vrai situation nécessitant un jeton car : pas de traitement cyclique et pas de file d'attente. Donc le terme n'est pas une solution de jeton, mais juste un solution de locking.

  8. #8
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut
    connaissez vous à tout hasard un code source struts (lien url) utilisant 1 ou 2 variables boolean (isValide, isSolded) traitant ce type de problème (sans avoir à gérer un token struts) ? en effet je suis novice en struts et je connais que le MVC classique

  9. #9
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Bonjour jakouz,

    Je reviens vers toi un peu tard (je pense d'ailleurs que ton problème a du etre résolu depuis). Mais je vais remonté le sujet car il est vrai que l'utilisation de ces méthodes Struts ne sont pas très documentées et surtout peu d'exemple sur le net (je parle bien sur de saveToken(), isTokenValid()).

    J'ai trouvé une URL (en anglais qui explique clairement cette problematique) :

    http://www.jaxmag.com/itr/online_art...odeid,147.html

    Grace a cela il est effectivement possible de faire un blocage d'une action dans le cas soumission multiple.

    Son utilisation est très simple.

    Exemple tiré de ce même site :

    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
    publicclass PurchaseOrderAction extends DispatchAction {
     
      public ActionForward load(ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response)throwsException{
    try{
    //save the token
            saveToken(request)
    // rest of the code for loading the form
    }catch(Exception ex){//exception}
      }
     
      public ActionForward submitOrder(ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response)throwsException{
        try{
          // check the token. Proceed only if token is valid
    if(isTokenValid(request,true)){
                //implement order submit functionality here
    }else{
    return mapping.findForward("failure");
    }
    }catch(Exception ex){//exception}
      }
    }
    En espérant que cela t'aide.
    Etre c'est etre relatif.

Discussions similaires

  1. On ne peut plus utiliser les jetons ?
    Par fant354684 dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 10/10/2012, 23h58
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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