gpt4 book ai didi

spring-security - 用于自定义 UserDetails 的 Spring Security salt

转载 作者:行者123 更新时间:2023-12-02 16:57:03 25 4
gpt4 key购买 nike

我想加盐,例如:

PasswordEncoder encoder = new ShaPasswordEncoder();
userDetails.setPassword(encoder.encodePassword(userDetails.getPassword(),saltSource.getSalt(userDetails));

到目前为止 userDetails 是我的自定义 UserDetail 类的实例,我不得不将其转换为这个 spring 类:UserDetails,但正如逻辑上预期的那样,我进入了运行时:

java.lang.ClassCastException: model.UserDetails cannot be cast to org.springframework.security.core.userdetails.UserDetails

配置:

<beans:bean id="saultSource" class="org.springframework.security.authentication.dao.ReflectionSaltSource">
<beans:property name="userPropertyToUse" value="username"/>
</beans:bean>

<authentication-manager alias="authenticationManager">
<authentication-provider>
<password-encoder hash="sha">
<salt-source user-property="username"/>
</password-encoder>
<jdbc-user-service data-source-ref="dataSource"/>
</authentication-provider>
</authentication-manager>

在这种情况下如何正确配置salt

最佳答案

ReflectionSaltSource 仅适用于 UserDetails 对象(我假设这就是您获得类转换异常的地方?),因此您必须实现 UserDetails 或创建您自己的适用于您的对象的 SaltSource 实现。

但是,我不会使用用户的属性作为盐,除非您正在使用已经这样做的遗留系统。用户名不是一个很好的盐值。最好使用与密码一起存储的随机盐。 BCrypt 算法就是一个很好的例子。请参阅我对 this question 的回答有关将其与 Spring Security 3.1 一起使用的示例。正如那里所解释的,BCrypt 自动生成一个随机盐,并将其存储在与散列密码相同的字符串中。

请注意,实际上有一个新的 PasswordEncoder Spring Security 3.1“crypto”包中的接口(interface)(在 org.springframework.security.crypto.password 中)。这不包括 API methods 中的盐。 ,因为它假设盐是内部生成的(就像 BCrypt 实现一样)。该框架通常会接受其中之一或旧版 org.springframework.security.authentication.encoding.PasswordEncoder。

关于spring-security - 用于自定义 UserDetails 的 Spring Security salt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8658584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com