2012-05-08 166 views
4

我想在我的web應用程序中使用Spring Security 3.1。我已經開始遵循這個特殊的tutorialSpring Security自定義用戶授權表

我使用這裏所使用的技術,其中在身份驗證提供者是一個數據源

<authentication-manager> 
    <authentication-provider> 
     <jdbc-user-service data-source-ref="dataSource" 

      users-by-username-query=" 
       select email,password 
       from usr where email=?" 

      authorities-by-username-query=" 
       select u.email, ur.authority from usr u, usr_roles ur 
       where u.usr_id = ur.usr_id and u.email =? " 

     /> 
    </authentication-provider> 
</authentication-manager> 

所以,如果你發現我使用的電子郵件作爲我的用戶名和我沒有啓用列。

這似乎不起作用。

我的登錄表單看起來像

<form name="f" action="<c:url value="j_spring_security_check" />" method="POST"> 
    <table> 
     <tr> 
     <td>User:</td> 
     <td><input type="text" name="j_username" value=""></td> 
     </tr> 
     <tr> 
     <td>Password:</td> 
     <td><input type="password" name="j_password" /> 
     </td> 
     </tr> 
     <tr> 
     <td colspan="2"> 
       <input name="submit" type="submit" value="submit" /> 
      </td> 
     </tr> 
     <tr> 
     <td colspan="2"> 
       <input name="reset" type="reset" /> 
     </td> 
     </tr> 
    </table> 
</form> 

請告知至於如何得到這個工作,還是我失去了一些東西?

回答

4

我設法自己解決它。我修改了以下認證管理器配置:

<authentication-manager> 
     <authentication-provider> 

      <jdbc-user-service data-source-ref="dataSource" 

      users-by-username-query=" 
       select * from (select email as username,password,1 as enabled 
       from usr) where username=?" 

      authorities-by-username-query=" 
      select * from 
      (select u.email username, ur.authority AUTHORITY 
      from usr u, usr_role ur 
       where u.usr_id = ur.usr_id) where username = ? " 

     /> 
     </authentication-provider> 
    </authentication-manager>