2011-11-28 26 views
1

請幫我在下面提及的場景....春季安全3.0拿不到/進程的用戶憑據

的applicationContext-security.xml文件

<authentication-manager> 
    <authentication-provider> 
    <jdbc-user-service data-source-ref="dataSource" 
     users-by-username-query="SELECT username, password FROM myLibrary.user WHERE username=?" /> 
    </authentication-provider> 
</authentication-manager> 

數據庫端(MySQL的)

CREATE TABLE `myLibrary`.`user` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `enabled` bit(1) DEFAULT NULL, 
    `fullName` varchar(255) DEFAULT NULL, 
    `password` varchar(120) DEFAULT NULL, 
    `username` varchar(40) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`), 
    UNIQUE KEY `username` (`username`) 
); 

XML的用戶

<user-service> 
    <user name="admin" password="amdin" authorities="supervisor, user" /> 
    <user name="counter1" password="counter1" authorities="user" /> 
</user-service> 

「dataSource」;價值觀也是完美的...... !!!在任何日誌中都沒有例外....這意味着圖書館的整合是完美的。實際上,當使用基於XML的用戶定義時,它的效果很好......但是在數據庫訪問中它卻不合適。

我的登錄頁面保持不變;我的意思是登錄失敗。請幫助朋友.... !!!!

+0

您確定沒有例外。你有沒有設置日誌級別來調試春季班? – flash

+0

您能否發佈登錄失敗的確切輸出?併發布安全配置。 – Ralph

+0

謝謝... @flash ...對不起...看不到你的評論....是的,有**沒有例外**,這是造成混亂... :) –

回答

0

對不起,延遲.... !!!所以問題出在用戶負責的桌面上,必須是users。它運行真棒..... !!!感謝朋友.....非常感謝... !!!!

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

在上面的xml-lines之前;確保爲用戶的表必須是users也是另一個表authorities必須使用外鍵的存在是爲了users - username。好吧..讓我把數據庫的一部分.. !!

CREATE TABLE `myLibrary`.`users` ( `id` int(11) NOT NULL AUTO_INCREMENT,  `enabled` bit(1) DEFAULT NULL,  `fullName` varchar(255) DEFAULT NULL,  `password` varchar(120) DEFAULT NULL,  `username` varchar(40) NOT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `id` (`id`),  UNIQUE KEY `username` (`username`) ); 

CREATE TABLE `myLibrary`.`authorities` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `authority` varchar(255) NOT NULL, 
    `username` varchar(255) NOT NULL, 
    `allowed` bit(1) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`), 
    KEY `fk_username` (`username`), 
    CONSTRAINT `fk_username` FOREIGN KEY (`username`) REFERENCES `users` (`username`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ; 

請注意, authorities(allowed)不是強制性的....它是我的代碼的一部分..因爲我想顯示用戶....所有它的權限,無論它的權限使用。

我使用hibernate等我得到ID場......和越野當然是高達你作爲FAS,因爲它的可用性關注。

祝您有美好的一天...... !!!!

:)

1

您需要更改查詢了一下,因爲JdbcDaoImpl預計3個參數:

  • 用戶名
  • 密碼
  • 啓用

,所以你需要添加true作爲最後一個參數:

<jdbc-user-service data-source-ref="dataSource" 
    users-by-username-query="SELECT username, password, true 
     FROM myLibrary.user WHERE username=?" /> 

不幸的是,這是不是非常有據可查的API,但你應該看看的org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl


者均基於source code: 如果使用部門,則還必須指定一個authorities-by-username-query(除了默認一個是你所需要的)

<jdbc-user-service 
    data-source-ref="dataSource" 
    users-by-username-query="SELECT username, password, true FROM myLibrary.user WHERE username=?" 
    authorities-by-username-query="SELECT username,authority from users WHERE username=?" 
/> 

當然,這是一個例子,查詢可能不會對你的表工作!

+0

謝謝拉爾夫.....我明白你的觀點......但我的qi = uestion沒有「權威機構 - 用戶名 - 查詢」....在我的方法中有沒有任何錯誤.. ????? –

+0

BikahSahoo:你是對的,我沒有閱讀'xml-user'的權利。但現在更有趣的問題是,這個文件是什麼。 'jdbc-user-service'將不會注意它(因爲我知道的票價) – Ralph

+0

好吧...我想通過** jdbc連接**向** spring-security **提供用戶憑據。那麼爲什麼** jdbc-user-service ** .... !!!!其次......憑證將來自**用戶**表......所以這就是爲什麼**用戶通過用戶名查詢**。 –