2011-08-24 3 views
6

Je souhaite utiliser la sécurité Spring pour authentifier les utilisateurs de mon application Web. Étant donné que je ne suis pas un utilisateur mûr pour Spring, je ne peux pas me faire une idée précise de la façon dont nous pouvons utiliser les paramètres de configuration pour utiliser jdbc-user- le service .. i avait fait ce qui suit configurations.but sa ne fonctionne pasUtiliser la base de données mysql pour authentifier les utilisateurs dans la sécurité de printemps?

<authentication-manager> 
    <authentication-provider> 
     <jdbc-user-service data-source-ref="myDataSource"/> 
    </authentication-provider>   
</authentication-manager> 
<beans:bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
    <beans:property name="url" value="jdbc:mysql://localhost:3306/testDB"/> 
    <beans:property name="username" value="admin"/> 
    <beans:property name="password" value="admin"/> 
</beans:bean> 

..can quelqu'un s'il vous plaît aidez-moi à résoudre le problème avec un fichier de configuration de l'échantillon. Merci d'avance.

+0

Quel est votre problème? Pouvez-vous poster des traces de pile, ou une description plus claire des problèmes auxquels vous êtes confrontés? – beny23

Répondre

6

Vous le faites généralement avec un UserDetailsService personnalisé. Le UserDetailsService est un DAO utilisé pour charger des données sur un utilisateur lorsqu'il tente de se connecter. Jetez un oeil à la méthode loadUserByUsername(String username) et la classe UserDetails au printemps.

Yo besoin de le définir dans votre contexte:

<bean id="myDetailsService" 
    class="com.company.service.impl.MyDetailsService" /> 

Pour l'utiliser, vous pouvez ajouter à votre configuration de sécurité:

<authentication-manager> 
    <authentication-provider user-service-ref="myDetailsService" /> 
</authentication-manager> 

et vous tous les filtres de sécurité vont l'utiliser.

Vous pouvez poser une question plus précise si vous avez besoin d'aide pour la mettre en œuvre, mais vous n'aurez aucun problème avec l'OMI.

+0

pouvez-vous juste donner un bref à propos de sa mise en œuvre aussi .. j'ai essayé pour cela, mais il ne reçoit pas. –

+0

vous pouvez voir les détails sur l'implémentation dans le lien fourni dans la réponse. http://www.codercorp.com/blog/spring/security-spring/writing-custom-userdetailsservice-for-spring-security.html – Simeon

+0

oui..je suis arrivé. –

6

Une autre façon de procéder consiste à créer des tables à l'aide du schéma de base de données de sécurité à ressort standard (http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-schema.html). Ensuite, vous pouvez simplement utiliser jdbc-UserService de printemps:

<security:authentication-provider > 
    <security:jdbc-user-service data-source-ref="dataSource" /> 
    <security:password-encoder hash="sha" /> 
</security:authentication-provider> 

Ou si vous voulez utiliser votre propre schéma que vous pouvez remplacer les requêtes comme celle-ci:

<security:authentication-provider> 
    <securiy:jdbc-user-service 
     data-source-ref="dataSource" 
     users-by-username-query="select username, password from users where username=?" 
     authorities-by-username-query="select username, roleName from role..." 
     role-prefix="ROLE_" 
    /> 
</security:authentication-provider> 
+0

Cette question est-elle corrigée? Parce que quand je change la requête selon mes tables ceci ne fonctionne pas, cela fonctionne seulement quand je conçois selon cette requête. – RishiPandey

1

Ajouter ces lignes à votre tag <authentication-provider> :

<authentication-provider> 
    <password-encoder hash="sha-256" /> 
    <jdbc-user-service data-source-ref="dataSource" 
      users-by-username-query=" 
       SELECT username, password, enabled 
       FROM user WHERE username = ?" 

      authorities-by-username-query=" 
       SELECT u.username, r.role_name 
       FROM user u, user_role r, assigned_role a 
       WHERE u.id = a.username 
       AND r.id = a.role_id 
       AND u.username = ?" 
     /> 
</authentication-provider> 

Bien sûr, vous devrez modifier les requêtes pour qu'elles correspondent aux noms de vos tables.

Questions connexes