2012-05-16 55 views
2

所以我明白你可以在Spring Security中檢查一個基於userDetail屬性的salt的密碼,然後對它進行哈希以與數據庫中的哈希進行比較,但是如果在創建時使用鹽用戶是隨機的(並存儲在數據庫中),我是否需要創建自己的userDetails類,其中包含salt屬性,然後將其設置爲field spring安全性在securityApplicationContext中使用的屬性?Spring Security 3 + Random Salt

如果是這樣,我將如何去寫我自己的userDetails類來完成?抱歉,Spring/Java仍然很新。

+1

如果鹽是隨機的,那麼您的問題的答案是'是',那麼您需要將其提供給驗證過程。只需像其他任何類一樣編寫'userDetails'類即可。 –

+0

好吧,但那麼我該如何告訴securityApplicationContext使用myCustomUserDetails類來存儲用戶而不是默認的userDetails類? – Felix

+0

你最好使用像Bcrypt這樣的包含隨機鹽的算法。如果你在這裏和其他地方在線搜索,你會發現這種事情[已經討論過了](http://stackoverflow.com/a/8662496/241990)。 –

回答

1

好吧,但那麼我該如何告訴securityApplicationContext使用myCustomUserDetails類來存儲用戶而不是默認的userDetails類?

像這樣:

<b:bean id="customUserDetailsService" class="com.your.company.security.MyUserDetailsService"/> 

<s:authentication-provider user-service-ref="customUserDetailsService" /> 

這正好在你的安全上下文。

另外這可能會有所幫助。

Writing a custom UserDetailsService

+0

啊,我看到這篇文章,同時谷歌搜索答案,但我認爲我現在更好地理解它。所以爲了確保,我實現了我自己的userDetailsS​​ervice,並在'loadByUsername'方法中返回一個userDetails對象,它是我自己實現的userDetails,是否正確? – Felix

+0

是的。正好,然後你注入你的新UserDetailsS​​ervice。 – Simeon

+0

好吧,我得到了CustomUserDetailsS​​ervice和CustomUserDetails,但是當我嘗試登錄時說,用戶名/密碼組合不正確。不知道如何調試它。 SpringSecurity如何比較輸入的密碼和數據庫?我把密碼作爲存儲在數據庫中的密碼。 它是否與變量類型有關?我從數據庫中獲取salt和hash作爲字節[],並在CustomUserDetails中獲得: password = new String(myUser.getHash(),「UTF8」); salt = new String(myUser.getSalt(),「UTF8」); – Felix

相關問題