Spring security 如何在Spring安全中使用数据库字段中的salt

Spring security 如何在Spring安全中使用数据库字段中的salt,spring-security,Spring Security,我正在使用spring-security-3.1.0和spring-framework-3.0.6。 对于登录安全检查,我使用的是salt。但是在salt中使用salt有问题 来源。 如果我使用bean:property name=“userpropertytoose”value=“username”,那么 一切都很好 但是在 即使很难,我已经为“salt”配置了所有必要的配置。 它传播了这一信息 在用户对象上找不到salt方法。类“org.springframework.security.co

我正在使用spring-security-3.1.0和spring-framework-3.0.6。 对于登录安全检查,我使用的是salt。但是在salt中使用salt有问题 来源。 如果我使用bean:property name=“userpropertytoose”value=“username”,那么 一切都很好 但是在
即使很难,我已经为
“salt”
配置了所有必要的配置。 它传播了这一信息 在用户对象上找不到salt方法。类“org.springframework.security.core.userdetails.User” 是否有名为“salt”的方法或getter?

我的spring-security.xml如下所示


选择U.userid作为用户名,
U.userpassword作为密码,
“true”已启用,
U.userpasswordsalt作为salt
来自用户U,其中U.userid=?
选择U.userid作为用户名,
美国作为权威的角色
来自用户U
其中U.userid=?
salt的jdbcUserService.java是

public类CustomJdbcDaoImpl扩展了JdbcDaoImpl{
@凌驾
受保护列表loadUsersByUsername(字符串用户名){
返回getJdbcTemplate().query(getUsersByUsernameQuery(),新字符串[]{username},
新的行映射器(){
public UserDetails映射行(ResultSet rs,int rowNum)抛出SQLException{
字符串用户名=rs.getString(1);
字符串密码=rs.getString(2);
布尔启用=rs.getBoolean(3);
字符串salt=rs.getString(4);
System.out.println(“CustomJdbcDaoImpl Salt:+Salt”);
返回新的salteuser(用户名、密码、已启用、true、true、true、AuthorityUtils.NO\u AUTHORITIES、salt);
}
});
} 
}
我的SaltedUser.java是

公共类SaltedUser扩展用户{
私盐;
公共SaltedUser(字符串用户名、字符串密码、启用布尔值、,
boolean AccountNoExpired,boolean CredentialsNoExpired,
布尔值AccountNonlock、ListAuthories、字符串salt){
超级(用户名、密码、已启用、AccountNoExpired、CredentialsNoExpired、AccountNoLocked、权限);
盐=盐;
System.out.println(“SaltedUser Salt:+Salt”);
}
公共字符串getSalt(){
返盐;
}
公共无效设置盐(字符串盐){
盐=盐;
}
}

任何人都可以帮助我….?

您需要重写
createUserDetails
方法,该方法创建类返回的最终
UserDetails
实现。查看
JdbcDaoImpl
的源代码


请注意,如果您不是为已有密码散列系统的遗留系统构建此系统,那么使用类似的方式对密码进行编码将是一个更好、更简单的选择。

如果我在Spring Security中使用BCryptPasswordEncoder,则需要在databaseNo中维护额外的salt字段。你读了我链接到的答案了吗?“这将自动生成salt并将其与单个字符串中的哈希值连接”