2011-11-12 61 views
2

我希望這個人是一個容易解決,春安二表權威性

什麼,我想實現的是使用一個登錄消費者和管理員的

這是我目前在ApplicationContext的-security.xml文件:

<authentication-manager alias="authenticationManager"> 
    <!-- DAO Based Security --> 
    <authentication-provider> 
     <password-encoder hash="sha-256" /> 
     <jdbc-user-service data-source-ref="dataSource" 
      users-by-username-query="SELECT A.user_name AS username, A.consumer_password AS password, A.enabled AS enabled FROM consumer A where A.user_name=?" 
      authorities-by-username-query="SELECT A.username as username, A.password as password, R.name as authority FROM admin A, roles R WHERE A.roles=R.id AND A.username=?"/> 
    </authentication-provider> 
</authentication-manager> 

登錄工作正常,任何一個消費者,但我無法從任何管理員的登錄賬戶

SQL retur N代表管理員帳戶:爲消費者賬戶

+----------+------------------------------------------------------------------+-----------+ 
| username | password               | authority | 
+----------+------------------------------------------------------------------+-----------+ 
| admin | 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 | ADMIN  | 
+----------+------------------------------------------------------------------+-----------+ 

SQL返回:

+----------+------------------------------------------------------------------+---------+ 
| username | password               | enabled | 
+----------+------------------------------------------------------------------+---------+ 
| adam  | 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 |  | 
+----------+------------------------------------------------------------------+---------+ 

回答

2

如果我理解正確的,消費者帳戶存儲在consumer表和管理員都存儲在admin表。爲什麼你期待那個管理員將能夠登錄,如果在users-by-username-query你只查詢consumers表而不是admin表?

我認爲最簡單的方法是將顧客和管理員存儲在一張表中(比如說user)。然後,您可以在users-by-username-query中查詢該表以檢查該登錄的用戶是否存在(不管客戶或管理員),然後通過查詢authorities-by-username-query中的roles表來檢查用戶是客戶還是管理員。

比方說,roles表可能看起來像:

+----------+------------------------------------------------------------------+ 
| username | role               
+----------+------------------------------------------------------------------+ 
| adam  | customer 
+----------+------------------------------------------------------------------+ 
| admin | admin 
+----------+------------------------------------------------------------------+ 

比你可以隨時問春季安全,如果當前登錄用戶的用戶或管理員(見http://static.springsource.org/spring-security/site/docs/3.1.x/reference/technical-overview.html#core-components,部分:關於當前獲取信息用戶)。

+0

嗯,這會更有意義 – adam2510