7
votes

Comment avoir un contrôleur de sécurité de fil dans la botte de printemps

Comment dois-je créer un contrôleur qui est en sécurité?

Selon les meilleurs contrôleurs de la pratique, Singleton est Singleton.

Considérez le code ci-dessous dans lequel IM enregistre les données d'utilisateur via un objet de service Auto-opiité. rend mon code sotculeux. Comment ferais-je la sécurité du fil de code ci-dessous. xxx

Voici mon implémentation de service. J'ai partagé une variable partagée dans mon service xxx

}


4 commentaires

Le code est le fil de sécurité .... En supposant qu'il n'y ait pas d'état partagé à l'intérieur du service ...


Je ne considérerais pas ce contrôleur sotticuleux, à moins que votre IdserVice soit énorme.


Si mon service est étatique, alors cela posera-t-il un problème


La meilleure approche à suivre dans le cas d'un service d'identification d'état serait-elle?


3 Réponses :


1
votes

Les contrôleurs sont singletons code>, ils sont donc doivent être mis en œuvre forts> de manière sécurisée de fil.

Concevez votre application de manière à ce que les contrôleurs sont apatrides. Ajouter une prise en charge transactionnelle dans votre @Repository code> couche. P>

Exemple: EM> PR> P>

public class GenericRepository<T, Serializable> {
 @Transactional
 public void save(T object) {
  // save user
 }
}


2 commentaires

Les contrôleurs doivent être appliqués à l'application.


@fabfas Annotation de manière générale transactionnelle ne doit pas être appliqué sur la couche de référentiel, l'utiliser au lieu de la couche de service. Eh bien, tout dépend de votre cas d'utilisation aussi.



0
votes

Votre contrôleur a l'air de fil en sécurité. Comme il n'y a pas de variable d'instance stockant l'état. L'objet utilisateur sera différent pour chaque demande et sera résolu par le cadre MVC.


2 commentaires

idbservice est partagé


idbservice est partagé mais il n'a pas d'état partagé ou n'a aucune variables d'instance stockant des valeurs pouvant être modifiées par d'autres threads.Refer [ Stackoverflow.com/questions/11508405/... & [ Stackoverflow.com/questions/11485486/...



10
votes

Votre contrôleur est un singleton par défaut et votre service est également Singleton par défaut.

Par conséquent, afin de les faire du thread de sécurité, vous devez vous assurer que les opérations qui se produisent à l'intérieur du service doivent être en sécurité, en cas de modification de l'état d'un objet à l'intérieur du service. une liste.

En cas d'utilisation d'un RDBM, vous avez un problème de transaction.

Si vous utilisez Spring et JPA, le gestionnaire de transactions prendra soin de vos mises à jour à condition que vous utilisiez @TransAderal. En cas de méthode JDBC uni, vous pouvez utiliser Pure JDBC et effectuer la manipulation de la transaction à votre guise ou utiliser Spring-JDBC fournie avec un Manager de transaction .

Si vous souhaitez que les lignes de base de données ne soit pas modifiées en cas d'écriture en cours, vous devez prendre en compte les mécanismes connexes de verrouillage de la ligne. - Gkatzioura 7 février à 15h23

En cas de JPA en utilisant @TransAderal fera le travail. Cependant, en fonction de votre application, vous devrez peut-être envisager de verrouiller. Vérifiez 5 commentaires