3 回答

TA貢獻1871條經(jīng)驗 獲得超13個贊
如果您自己選擇一個哈希系統(tǒng),而不是使用已經(jīng)包含哈希密碼的現(xiàn)有數(shù)據(jù)庫來構(gòu)建應用程序,則應確保哈希算法也使用了鹽。不要只使用簡單的摘要。
bcrypt是一個不錯的選擇,現(xiàn)在我們可以通過BCryptPasswordEncoder(使用jBCrypt實現(xiàn))在Spring Security 3.1中直接支持bcrypt 。這會自動生成一個鹽,并將其與哈希值在單個String中連接。
一些數(shù)據(jù)庫內(nèi)置了對哈希的支持(例如Postgres)。否則,您需要先對密碼進行哈希處理,然后再將其傳遞給JDBC:
String password = "plaintextPassword";
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String hashedPassword = passwordEncoder.encode(password);
創(chuàng)建用戶時,只需要做這些即可對密碼進行編碼。
對于身份驗證,您將使用類似以下的內(nèi)容:
<bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
<bean id="authProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="yourJdbcUserService" />
<property name="passwordEncoder" ref="encoder" />
</bean>

TA貢獻1797條經(jīng)驗 獲得超4個贊
您可以通過簡單的方式在applicationContext-security.xml中執(zhí)行類似操作
<authentication-manager alias="authenticationManager">
<authentication-provider>
<password-encoder ref="encoder"/>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="
select username,password, enabled
from principal where username=?"
authorities-by-username-query="
select p.username, a.authority from principal p, authority a
where p.id = a.principal_id and p.username=?"
/>
</authentication-provider>
</authentication-manager>
<beans:bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
在Java中
public static String encodePasswordWithBCrypt(String plainPassword){
return new BCryptPasswordEncoder().encode(plainPassword);
}
然后測試
System.out.println(encodePasswordWithBCrypt("fsdfd"));
- 3 回答
- 0 關(guān)注
- 771 瀏覽
添加回答
舉報