11
votes

@Autowire ne fonctionne pas dans le fournisseur d'authentification personnalisé de sécurité de printemps

Nous avons une application MVC printemps. Nous essayons d'intégrer la sécurité de printemps.

Nous avons écrit notre fournisseur d'authentification personnalisé qui fera le travail d'authentification. p>

ci-dessous est le code de mon fournisseur d'authentification personnalisé. p>

<beans:bean id="customAuthenticationProvider" class="com.myApp.security.provider.CustomAuthenticationProvider">
    <beans:property name="userDetailsService" ref="userDetailsService"/>   
</beans:bean>


1 commentaires

Avez-vous des fichiers journaux qui signalent quelque chose d'utile?


7 Réponses :


0
votes

Vous devez définir votre CustomAuthenticationProvider en tant que haricot de printemps (dans ApplicationContext.xml en général ou ApplicationContext-Security.xml si vous en avez un)


3 commentaires

C merci pour la réponse. J'ai défini mon fournisseur d'authentification personnalisé à Spring Security XML. S'il vous plaît voir j'ai mis à jour ma question. Dois-je faire autre chose?


Je ne vois pas votre service d'authentifié dans votre fichier de configuration haricot. L'authentifier doit également être défini comme un haricot. Votre personnalité CustomAuthenticantication est-elle également autonome où vous essayez de l'utiliser? Parce que si vous l'instachez vous-même, le printemps ne peut pas l'envelopper dans un proxy


AuthentifierService n'est pas défini dans le fichier de configuration du haricot, car j'ai utilisé l'annotation @service ici.



3
votes

Peut-être postprocesseur d'application automatique n'est pas activé dans le contexte de l'application racine (mais activé dans le contexte Disternersservlet comme un effet secondaire de ou ).

Vous pouvez l'activer en ajoutant à myApp-Security.xml . .


5 commentaires

J'ai essayé cela mais ça ne fonctionne pas. En fait, après avoir ajouté cette ligne dans mon myApp-Security.xml, l'application n'est même pas déployée.


@Ashish: Avez-vous également ajouté la définition de schéma correspondante dans l'en-tête XML?


S'il n'y a pas de chance, pourquoi avez-vous marqué cela comme la bonne réponse ?!


Comment ça est marqué comme la réponse correcte.non la chance du tout. Downvote pour sauver les autres temps.


Downvoting car ce n'est pas la bonne réponse, voir la réponse de Rob Winch.



4
votes

Utilisez-vous l'élément ? Si tel est le cas, essayez de supprimer si elle corrige votre problème comme SEC-1885 empêche @Autowired du travail lors de l'utilisation de .


1 commentaires

GOOOOD !!! J'ai passé 4 heures à comprendre pourquoi il ne fonctionnait pas et j'ai même créé ce message Stackoverflow.com/Questtions/23437738/... . merci, vol !! C'était le problème dans mon cas. (Je travaille toujours avec 3.1.0)



3
votes

J'ai expérimenté cette question et je suis arrivé à la conclusion que, tout en ayant eu lieu, la sécurité de printemps fonctionnait avec un exemple complètement différent des classes. Pour résoudre ce problème, j'ai importé la configuration de sécurité dans la configuration de Spring MVC comme ci-dessous.

Ceci permettait la sécurité du ressort de partager le contexte avec mon Spring MVC. P>

<import resource="myapp-security.xml" />


0 commentaires

0
votes

vous devriez utiliser Vous ne pouvez pas utiliser car votre myApp-Security.xml crée une autre applicationContext qui ne voit pas toute la mise en forme de mise en forme de votre contexte créé par MyApp-servlet.xml


0 commentaires

1
votes

J'ai fait face au même problème et corrigé cela.

La solution est même si vous avez @Autowired annotation définie pour la classe de service. p> xxx pré>

retiré la définition de haricot dans votre répartiteur-servle.xml et cela fonctionnera. P>

 <!--
 <beans:bean id="customAuthenticationProvider" class="com.myApp.security.provider.CustomAuthenticationProvider">
 <beans:property name="userDetailsService" ref="userDetailsService"/>   
 </beans:bean>
 -->


0 commentaires

0
votes

Si vous utilisez le ressort MVC, vous devez ajouter Spring-Security.xml et Dispatcher-servle.xml dans contextconfiglocation forte>.

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring-security.xml
            /WEB-INF/dispatcher-servlet.xml
        </param-value>
    </context-param>


0 commentaires