使用Spring Security对密码进行哈希和腌制 3

2022-09-03 04:29:46

如何散列密码并使用Spring Security 3对其进行加盐?


答案 1

从程序上讲,您将按如下方式执行此操作:

在应用程序上下文中.xml(在 web 中定义.xml下)文件定义 Bean(此示例使用 )。contextConfigLocationmd5

<bean class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" id="passwordEncoder" />

然后自动连接密码编码器:

@Autowired
PasswordEncoder passwordEncoder;

在您的方法中或您想要散列和盐的任何地方。

passwordEncoder.encodePassword("MyPasswordAsString", "mySaltAsStringOrObject");

上述调用应返回一个加盐的哈希值(作为 )。String

这应该可以做到。我假设你可以弄清楚你需要的罐子。

更新

不言而喻,使用MD5不是最好的主意。理想情况下,您至少应该使用SHA-256。这可以通过ShaPasswordEncoder来完成。

将上面的 MD5 豆配置替换为:

<bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.ShaPasswordEncoder">
     <constructor-arg value="256"/>
</bean>

答案 2

最简单的似乎是Spring Security 3.1,假设对哈希处理的方式没有限制:

<bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

<security:authentication-manager>
    <security:authentication-provider>
        <security:password-encoder ref="encoder"/>
        <security:jdbc-user-service data-source-ref="dataSource" users-by-username-query="select username,password, enabled from users where username=?" authorities-by-username-query="select u.username, ur.authority from users u, user_roles ur where u.username = ur.username and u.username =?"/>
    </security:authentication-provider>
</security:authentication-manager>


@Controller
@Stateless
public class UsersEJB {
    @PersistenceContext(unitName = "somePU")
    private EntityManager em;
    @Transactional
    public void create(Users users) {
        PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        String hashedPassword = passwordEncoder.encode(users.getPassword());
        users.setPassword(hashedPassword);
        em.persist(users);
    }
}

推荐