Question

Après la mise à niveau de Spring 3.0.0.M4 à 3.0.0.RC1 et de Spring Security 3.0.0.M2 à 3.0.0.RC1, j'ai dû utiliser une balise security: authentication-manager au lieu de définir un _authenticationManager comme je le faisais auparavant dans M4 / M2. J'ai fait de mon mieux pour le définir et je me suis retrouvé avec ceci:

<security:authentication-manager alias="authenticationManager">
  <security:authentication-provider user-service-ref="userService">
    <security:password-encoder hash="plaintext"/>
  </security:authentication-provider>
</security:authentication-manager>

Lorsque je fais mes tests unitaires un par un, cela fonctionne très bien, et pour la plupart des demandes AJAX, cela fonctionne également, mais apparemment, de façon aléatoire, des erreurs étranges me sont commises dans mes transactions, où ma session de base de données semble se fermer à mi-chemin. l'oeuvre. Je peux provoquer ces erreurs en envoyant simplement un grand nombre de requêtes AJAX différentes à mes différents contrôleurs à partir du même client. Au moins une d'entre elles échouera de manière aléatoire. La prochaine fois que j'essaierai, cela fonctionnera et un autre échouera.

L'erreur se produit le plus souvent dans userDAO, mais aussi assez fréquemment dans d'autres DAOS. Les exceptions incluent au moins les éléments suivants:

  • " java.sql.SQLException: opération interdite après la fermeture de ResultSet "
  • "org.hibernate.impl.AbstractSessionImpl: errorIfClosed (): la session est fermée!" "
  • "java.lang.NullPointerException à l'adresse com.mysql.jdbc.PreparedStatement.fillSendPacket (PreparedStatement.java:2439)"
  • " java.util.ConcurrentModificationException à java.util.LinkedHashMap $ LinkedHashIterator.nextEntry (source inconnue) "
  • " org.hibernate.LazyInitializationException: accès illégal à la collection de chargement ""
  • etc ...

Avant, je définissais un bean _authenticationManager et les mêmes requêtes fonctionnaient comme un charme. Mais avec RC1, je ne suis plus autorisé à le définir. Cela ressemblait à ceci:

<bean id="_authenticationManager" class="org.springframework.security.authentication.ProviderManager">
  <property name="providers">
    <list>
      <bean class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
        <property name="userDetailsService" ref="userService"/>
        <property name="passwordEncoder">
          <bean class="org.springframework.security.authentication.encoding.PlaintextPasswordEncoder" />
        </property>
      </bean>
    </list>
  </property>
</bean>

Est-ce que j'ai mal défini ma sécurité: authentication-manager pour qu'il puisse partager les transactions de plusieurs requêtes provenant du même client? Devrais-je le définir différemment, ou devrais-je définir une autre sécurité: les haricots?

Y a-t-il quelque chose que j'ai mal compris qui rend mes sessions de base de données fermées? Dans ma tête, chaque demande a sa propre connexion à la base de données et sa propre transaction. Tous les getters et les setters sont des méthodes synchronisées, je ne devrais donc pas avoir de problèmes de simultanéité. Tous les contrôleurs REST auxquels l’UI fait des requêtes sont des requêtes GET et fonctionnent en lecture seule. À ma connaissance, aucune de ces requêtes INSERT / UPDATE / DELETE n’est effectuée, et j’ai inspecté les journaux de la base de données pour le vérifier.

J'attends vos suggestions sur la manière d'éviter ces conditions de course.

A bientôt

Nik

PS, j'ai mis à jour la question pour préciser que le problème est lié à la sécurité: authentication-manager (ou alors, me semble-t-il, si vous avez des astuces, cela pourrait être très utile) que je suis obligé d'utiliser à la place de mon propre _authenticationManager à partir de 3.0.0.RC1

PPS, voici le fil qui m'a fait comprendre que je ne pouvais plus définir un _authenticationManager: Message du forum SpringSource

Était-ce utile?

La solution

Il semble que j'ai eu un gros problème de gestion de session de base de données dans mon DAO. J'ai donc créé un a écrit mon problème et a posté la solution dans un autre fil ici sur StackOverflow et a demandé l'avis des utilisateurs sur la solution. J'espère que cela ne donnera pas plus de problèmes: -)

A bientôt

Nik

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