2013-11-26 176 views
0

我試圖使用從mykong網站爲例來讓Spring安全...
http://www.mkyong.com/spring-security/spring-security-form-login-using-database/調試春季安全認證經理

我有它的工作使用簡單的MySQL表,但現在我想使用db2將密碼存儲在數據庫中,使用md5進行加密。

這裏是我如何設置...

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

      users-by-username-query=" 
       select employeenumber, employeepassword 
       from employee where employeenumber like ? 
       and employeestatus = 'Active'" 

      authorities-by-username-query=" 
       select employeenumber, securitygroupcode 
       from employee 
       where employeenumber like ? 
       and employeestatus = 'Active'" 
     /> 
    </authentication-provider> 
</authentication-manager> 

當我嘗試登錄到我的應用程序,我輸入不正確的登錄細節它正確地告訴我...

你的登錄嘗試沒有成功,請再試一次。 引起:無效的用戶名或密碼

但是,當我登錄正確我輸入正確的登錄信息,我得到...

您的登錄嘗試不成功,再試一次。 引起:PreparedStatementCallback;未分類SQL的SQLException [選擇從僱主名稱作爲用戶名,僱員密碼作爲密碼從epos.employee其中僱傭號碼像?和sitedirectoryid = 10001和employeestatus ='激活']; SQL狀態[null];錯誤代碼[-99999]; [ibm] [db2] [jcc] [10145] [10897]無效的參數3:參數索引超出範圍。嵌套的異常是com.ibm.db2.jcc.b.SqlException:[ibm] [db2] [jcc] [10145] [10897]無效的參數3:參數索引超出範圍。

謝謝全部

+0

它只是一個MD5散列或者在生成的散列中有其他內容(即鹽或其他東西)。另外(如果我沒有弄錯),Spring生成的MD5是小寫,所以如果db一個是大寫,那麼失敗。 –

+0

嗨,我剛剛看了一下存儲在我的數據庫中的內容,它與我在http://md5encryption.com/上使用小寫字母時得到的內容相符。所以我想這意味着它應該是正確的? – Richie

+0

我想通了什麼是錯的。這是我的錯誤。現在發生的是,當我輸入正確的細節時,我得到了一個不同的錯誤。我正在更改我的帖子以反映新錯誤 – Richie

回答

0

謝謝你的幫助。我的問題是我沒有在我的查詢中包含啓用的列,這顯然會導致參數3:參數索引超出範圍。

無論如何,我決定給自己多一點控制權,並擴展JdbcDaoImpl類並編寫自己的setAuthoritiesByUsernameQuery()。我還沒有測試過它,但是我對這種方法很開心,因爲它允許開發人員通過執行查詢的代碼進行調試,並且我仍然可以將md5注入爲加密。它是兩全其美的。希望我能得到它的工作!