Je peux lire dans de nombreux sites Web que les classes d'action Struts ne sont pas en sécurité. Je ne suis pas capable de comprendre pourquoi c'est le cas. P>
Aussi j'ai lu un livre qui dit que les classes d'action Comment est la cache des classes d'action et être un fil de sécurité? . P>
5 Réponses :
Si une classe est mise en cache et réutilisée, il existe un risque de corruption pour les accès simultanés par plusieurs threads. Dans une application Web, chaque demande est traitée sur un fil. Disons que vous disposez de 10 cas d'action, mais votre conteneur traite 20 demandes - dans ce cas, vos 10 actions sont chacune réutilisées, car vous avez plus de demandes en vol que des actions disponibles pour les servir. p>
Le problème de sécurité du fil n'approrte que sa tête s'il y a un état réutilisé dans l'action. Si tel est le cas, une action qui entretient une demande peut définir une valeur dans la variable partagée, mais un autre thread peut alors prendre la relève et l'action pourrait à nouveau modifier la variable partagée. Dans ce cas, lorsque le thread d'origine prend la relève, l'état partagé a été modifié. P>
Le moyen facile de traiter avec ceci est de configurer votre pile pour simplement utiliser une nouvelle action ou assurez-vous de ne pas avoir d'état partagé dans vos actions. p>
Comment configurons-nous la pile pour toujours utiliser une nouvelle action? Est-il possible de le faire dans des jambes de force 1?
Pourquoi ne pas créer une nouvelle "action" d'objet par demande? Quoi dans le monde ?? p>
Parce que les jambes de force sont si âgées, il pense à créer un autre objet par cycle de demande est aussi coûteux que de payer un dollar pour un café. (C'est très cher. Parce qu'il est vraiment vieux.) p>
Struts2 n'est pas vieux. Voici une belle table de comparaison: Strutures.apache .Org / 2.0.14 / Docs / Comparaison-Struts-1-and-2.HTML
Je pense que l'irréparable faisait référence aux Struts 1, ce qui est vieux. D'accord que Struts 2 n'est pas vieux, cependant.
Absolument! Je viens d'écrire le commentaire ci-dessus, de sorte que les nouveaux programmeurs ne prennent pas une mauvaise impression sur les jambes de force. Quand nous disons "Struts" aujourd'hui, nous voulons dire Struts2 la plupart du temps ...
En raison de la façon dont les mauvaises jambes de force sont à la réputation de Struts2, lors de l'écriture, j'essaie de dire "Struts2", puis utilisez S2 pour toutes les références futures. Quelle douleur leur choix de nommage était!
Oui je suis d'accord. Je souhaite que ce soit toujours appelé Webwork. Quoi que nous appelions cela, c'est un excellent cadre.
Comment la mise en cache des classes d'action et être le fil de sécurité? P> blockQuote>
Si vous mettez en cache et réutilisez des instances d'une classe, permettant à plusieurs threads d'accéder à la même instance simultanément, puis la classe est intrinsèquement
pas em> strong> thread-coffre-fort *. Si vous deviez placer une instance mutable ou des champs statiques sur la classe, les résultats sous concurrence seraient inattendus et problématiques. D'autre part, si chaque fil a sa propre instance de la classe, la classe est intrinsèquement thread-coffre-fort. P>
- Struts 1 Les classes d'action ne sont pas du thread-coffre-fort. Vous ne devez pas placer des champs mutables sur la classe, à l'aide d'une classe de beans de formulaire pour les champs de formulaire passés à l'action. Li>
- Struts 2 Les classes d'action sont du thread-coffre-fort. Les nouvelles copies sont instanciées pour chaque demande et placer des champs d'instance de la classe est un concept de base dans le cadre. LI> ul>
* Si l'instance ou le champ statique est immuable, c'est une amende pour plusieurs threads pour y accéder simultanément. P>
Pourriez-vous expliquer ce concept de jambes de force 1 et de jambe de force 2 différence avec un bel exemple de travail
En regardant la source de jambes de force, vous verrez que cela retourne simplement des cours d'action instanciés. Donc, sur, deux demandes peuvent toucher la même variable d'instance, créant de nombreux problèmes si ce n'est pas synchronisé correctement.
Lors de la recherche d'une solution pour ce problème pour un ancien projet de Struts 1 qui se comportait au hasard en raison de quelques appels AJAX à la même action, je pensais que vous pouvez résoudre le problème de sécurité du fil pour ce cas en utilisant Peut-être que cela aide P> P> Scope = "Demande" code> sur votre
Struts-config.xml code> fichier.
Où avez-vous lu ceci?
Ce Book
Juste pour la perspicacité, le livre a été publié le 31 mars 2007. Struts2 a été publié 2008. Voir: EN.Wikipedia .org / wiki / apache_struts # Historique ... de toute façon S2 est un produit très différent de S1 ... juste en disant cela pour vous assurer que vous comprenez S1 et S2 ne sont liés que par leur nom.
J'ai ajouté la balise CODE> STRUTS CODE>, car cela est devenu une sorte de comparaison de la manière dont les instances de la classe d'action diffèrent entre les versions 1 et 2.