2011-02-02 1 views
3

J'ai créé un fournisseur d'authentification personnalisé en étendant AbstractUserDetailsAuthenticationProvider pour authentifier l'utilisateur par rapport à la base de données et effectuer des vérifications d'autorisation supplémentaires.Spring Security 3.x: Création d'un fournisseur d'authentification personnalisé sans UserDetailsService

L'ennui que je suis confronté est le fournisseur d'authentification me demande de câbler un UserDetailsService. Au moins pour ce projet, je n'ai aucun besoin de UserDetailsService parce que si j'ai le fournisseur d'authentification pour tirer les informations d'utilisateur pour effectuer l'authentification/autorisation, je ne vois pas le besoin d'avoir le UserDetailsService pour tirer les mêmes informations d'utilisateur pour construire le UserDetails objet.

Donc, en ce moment, je dois câbler un UserDetailsService factice dans mon fournisseur d'authentification et il ne fait absolument rien.

Est-il possible de créer un fournisseur d'authentification sans UserDetailsService?

Répondre

2

En regardant le code de AbstractUserDetailsAuthenticationProvider (au moins pour la version 3.0.5), il n'est pas nécessaire que UserDetailsService soit câblé. Vérifiez votre configuration XML pour vous assurer que le DAOAuthenticationProvider n'est pas utilisé.

Vous devriez avoir un bloc comme celui-ci

<authentication-manager> 
    <authentication-provider ref="yourAuthenticationProvider" /> 
</authentication-manager> 

Aussi, connectez-vous à l'exception que vous obtenez de voir exactement où il se fait jeté de.

+0

Lorsque vous faites un fournisseur d'authentification personnalisé, je crois qu'au moins un UserDetailsService doit être enregistré. J'ai essayé de le faire fonctionner sans et ne pouvais pas trouver un moyen. 'Méthode d'usine [org.springframework.security.core.userdetails.UserDetailsService org.springframework.security.config.http.UserDetailsServiceFactoryBean.cachingUserDetailsService (java.lang.String)] a lancé une exception; l'exception imbriquée est org.springframework.context.ApplicationContextException: aucun UserDetailsService enregistré. » – skel625

+0

Quelle classe lève l'exception imbriquée? – sourcedelica

0

Le fournisseur d'authentification par défaut utilisé par Spring sera DaoAuthenticationProvider (extension AbstractUserDetailsAuthenticationProvider et ajoute des vérifications de son propre numéro dans doAfterPropertiesSet()).

Cette implémentation nécessite donc un UserDetailsService mais vous pouvez toujours fournir votre propre implémentation du fournisseur en étendant AbstractUserDetailsAuthenticationProvider.

+0

il a effectivement décrit dans son message qu'il l'a déjà fait - extended AbstractUserDetailsAuthenticationProvider – Julia

Questions connexes