Question

Je suis à la recherche d'une méthode ou API actuelle qui vous permet d'ajouter sur des jetons aux demandes d'applications Web. Peut-être que dans la session, mais pas persisté. Ou si vous pouviez me aider en décrivant une méthode efficace pour ce faire

par exemple.

1. GET demande => Servlet génère un jeton et l'imprime dans la vue

2. retourne une vue avec un jeton caché

<input type="hidden" name="token" value="UA37jdjs9UDJS3">
<input type="submit" name="deleteEmail" value="Delete">

3. Demande POST => formulaire est soumis et vérifie si le jeton est le même.

Peu de choses à noter, s'il y a des requêtes Ajax alors d'autres jetons devraient être en vie pour un certain nombre de demandes.

Si l'utilisateur décide de fermer le navigateur, le jeton devrait mourir lorsque la session temps est dépassé.

Si l'utilisateur ne parvient pas à remplir le formulaire, en va faire quelque chose d'autre sur le site, ces jetons devraient être supprimés car ils inutilisés.

Mais quelle est la meilleure façon de mettre en œuvre un système comme celui-ci,

Est-ce que la sécurité Spring 3 ont un système que je peux utiliser?

dans le Java, Grails, Spring MVC, Spring Security 3 et zone Mise en veille prolongée

Était-ce utile?

La solution

Avez-vous un coup d'oeil à "modèle de jeton Synchronizer" dans la documentation Grails http://grails.org/doc/1.2.0/guide/single.html ?

Autres conseils

Jetez un oeil sur le projet HDIV http://www.hdiv.org/ . Ils font exactement cela. Même si vous n'utilisez pas le code du projet HDIV alors l'information, il vous donnera peut une option comment le faire vous-même. Il me était une bonne amorce pour en apprendre davantage sur la manipulation des jetons pour des choses comme CSRF et d'autres utilisations comme à double soumettre des commandes.

d'abord pensé que vous pourriez utiliser l'identifiant de session déjà généré. Mais si vous essayez d'état fourche Je suggère d'utiliser quelque chose comme coutures modèle de conversation

Pourquoi n'utilise pas seulement le session_id que le conteneur Web génère pour vous lorsque vous appelez request.getSession () ?

Si vous voulez créer votre propre « jeton » vous pouvez vérifier les cookies. Un cookie est une paire clé-valeur envoyé comme un en-tête HTTP d'un serveur Web à un navigateur Web, puis renvoyé inchangé par le navigateur chaque fois qu'il accède à ce serveur.

Pour créer un cookie dans un Servlet vous pouvez utilisations:

public void doGet ( HttpServletRequest request, HttpServletResponse response )
     throws ServletException, IOException {
  // Create a cookie
  Cookie c1 = new Cookie("yourdomain.token","the value");
  response.addCookie(c1);
 //build your response

}

Le cookie sera automatiquement inclus dans la prochaine requête http. Vous pouvez le lire en arrière avec:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
//build your response
}

J'ai récemment rencontré un cas d'utilisation pour cela.

Si une ancienne fenêtre d'application était présent dans le navigateur, et un lien de connexion a été cliqué une autre fenêtre de navigateur, l'action de la première connexion a créé une nouvelle session, puis redirigés vers la fenêtre d'application. Cela a déclenché l'ancienne méthode de la méthode onunload de fenêtre, ce qui a donné lieu à une demande de fermeture de session au serveur de vous déconnecter le nouvel utilisateur.

En se fondant sur un événement onunload javascript pour vous déconnecter semble un peu merdique pour moi, mais cela ne pouvait pas être changé, donc nous avons choisi de faire comme l'OP a suggéré et a ajouté un jeton dans chaque vue rendu, en vérifiant pour chaque demande. Cela arrête la demande onunload logout de mettre fin à la nouvelle session.

Quant à la meilleure façon, je dirais que cela est assez simple. Vous pouvez par exemple utiliser http: // java .sun.com / J2SE / 1.5.0 / docs / api / java / util / UUID.html pour générer des clés uniques. Si vous utilisez un cadre à base de composants comme la tapisserie, JSF ou Wicket il pourrait y avoir un moyen plus haut niveau de la manipulation de ce.

Est-ce similaire à votre usecase? Vous essayez d'atteindre quelque chose de complètement différent?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top