2010-09-09 4 views
1

La combinaison de corporateId et de nom d'utilisateur est unique pour nous dans la table des utilisateurs.Authentification avec Spring Security avec usersByUsernameQuery

Je sais printemps fournir un mécanisme pour écrire une requête personnalisée pour l'authentification.

<bean id="authenticationDao" 
    class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl"> 
    <property name="dataSource" ref bean="dataSource" /> 
    <property name="usersByUsernameQuery"> 
     <value> 
      SELECT username,password,enabled 
      FROM User WHERE username=? and corporateId=? 
     </value> 
    </property> 
</bean> 

Mais le problème ici est que nous avons deux variables de liaison dans la requête au lieu d'une. Je ne suis pas sûr comment j'utilise le cadre de sécurité de printemps avec cette structure DB. La clé primaire de la table User est UserId. Est-il possible de mettre un préprocesseur avant d'appeler la méthode d'authentification par laquelle je peux récupérer userId par la combinaison de nom d'utilisateur et d'ID d'entreprise, puis utiliser SELECT nom d'utilisateur, mot de passe, activé FROM User WHERE userid =? requête.

Toute aide serait très apperçu.

Répondre

0

Je pense que vous avez besoin de votre propre fournisseur d'authentification depuis que vous avez l'intention de tenter de match contre le nom d'utilisateur, mot de passe et l'identifiant d'entreprise , le userDetailsService retourne l'objet une fois l'authentification réussie.

un coup d'oeil à cette question et la réponse, je pense qu'il vous mènera sur le chemin droit

Creating a custom authentication with Acegi/Spring Security

0

Si par défaut JdbcDaoImpl ne répond pas à vos besoins, vous pouvez mettre en œuvre votre propre UserDetailsService:

<bean id="authenticationDao" 
    class="... your implementation class ..." /> 
Questions connexes