2010-09-09 44 views
1

企业用户名和用户名的组合在用户表中是唯一的。用户使用Spring Security进行身份验证BY用户名查询

我知道spring提供了一种为认证编写自定义查询的机制。

<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> 

但问题是我们在查询中有两个绑定变量而不是一个。我不知道如何在这个db结构中使用spring安全框架。 用户表的主键是UserId。是否有任何把预处理器调用认证方法之前,我可以通过用户名和corporateId组合获取userId,然后使用这个SELECT用户名,密码,启用 从用户WHERE userid =?查询。

任何帮助将非常appericated。

回答

0

我想你需要自己的认证供应商,因为你打算尝试去匹配用户名,密码及企业标识,一旦认证成功,userDetailsS​​ervice就返回对象。

看看这个问题的答案,我认为它会导致你在正确的道路

Creating a custom authentication with Acegi/Spring Security

0

如果默认JdbcDaoImpl不能满足你的需求,你可以实现你自己的UserDetailsService

<bean id="authenticationDao" 
    class="... your implementation class ..." /> 
相关问题