我为Web应用程序介绍Spring安全性。首先,我的身份验证管理器如下所示。
<authentication-manager>
<authentication-provider>
<password-encoder hash='md5'>
</password-encoder>
<jdbc-user-service data-source-ref="dataSource"/>
</authentication-provider>
</authentication-manager>
对于测试,我将使用'1'作为用户名和密码。我使用在线md5哈希生成器,我得到md5(1)的'c4ca4238a0b923820dcc509a6f75849b'。登录适用于此配置。我想尝试盐,我修改身份验证管理器如下。
<authentication-manager>
<authentication-provider>
<password-encoder hash='md5'>
<salt-source user-property="username"/>
</password-encoder>
<jdbc-user-service data-source-ref="dataSource"/>
</authentication-provider>
</authentication-manager>
因此,当我在网上阅读盐如何使用哈希(盐+密码)。所以使用相同的工具我散列'11'然后得到散列值'6512bd43d9caa6e02c990b0a82652dca'。我用该值更新数据库。但现在登录失败并抛出错误'引发:凭据错误'。这意味着密码与数据库不匹配。所以我的问题是,这是否意味着Spring使用不同的方式进行腌制?
答案 0 :(得分:2)
由于您使用的是spring安全性,因此可以考虑使用PasswordEncoder
bean。
<beans:bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.ShaPasswordEncoder">
</beans:bean>
您的身份验证管理器就像(更改代码):
<authentication-manager>
<authentication-provider>
<password-encoder ref="passwordEncoder">
<salt-source user-property="username"/>
<password-encoder/>
<jdbc-user-service data-source-ref="dataSource"/>
</authentication-provider>
</authentication-manager>
访问Spring Security Custom Authentication and Password Encoding&amp; Spring Security:password encoding in DB and in applicationContext了解更多信息。
答案 1 :(得分:0)
public static void main(String[] args) {
Md5PasswordEncoder md5 = new Md5PasswordEncoder();
String hash = md5.encodePassword("1", "1");
System.out.println(hash);
}
我得到'6a8a1f634e38d30e87b450899b31f810'作为加密密码(不同吧?)。然后我将它插入数据库并尝试我的应用程序登录。佛拉!登录成功。