如何使用Spring验证密码

2022-09-04 06:52:29

我已经找到了如何使用SpringMVC对某人的密码进行哈希处理并将其保存在数据库中:

BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String pw = passwordEncoder.encode("test");

现在的问题是,如何验证来自允许用户登录我的 Web 应用的请求的密码?经过一些研究,我发现有很多方法可以做到这一点。某些解决方案适用于用户角色。

我的Web应用程序应该做的是为我的用户提供一个登录页面,他们可以在其中注册(在这里我会使用上面显示的代码保留密码)。注册后,他们应该能够登录,这意味着我需要验证登录表单中的密码。有没有最先进的例子?


答案 1

以下是原始密码与编码密码匹配的方式:

passwordEncoder.matches("rawPassword", user.getPassword()),

但正如其他人所说,自己编写Security代码很麻烦,所以我建议使用Spring Security代替。是的,它确实需要努力学习,但你可以找到很好的教程。这是一个独特的教程(免责声明:我是作者)。


答案 2

这是我在春季实现自己的更改密码功能时使用的

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

@Service
public class Utility {

   private static BCryptPasswordEncoder passwordEcorder = new BCryptPasswordEncoder();


   public String bcryptEncryptor(String plainText) {
       return passwordEcorder.encode(plainText);
   }

   public Boolean doPasswordsMatch(String rawPassword,String encodedPassword) {
      return passwordEcorder.matches(rawPassword, encodedPassword);
   }
}

然后在代码中匹配两个密码,即rawPassword = password1234和codedPassword = $2a $10 $zxvEq8XzYEYtNjbkRsJEbukHeRx3XS6MDXHMu8cNuNsRfZJWwswDy

代码将像这样(在实用程序类的某个自动连接对象上调用):

  doPasswordsMatch( rawPassword, encodedPassword );

如果密码匹配,这将返回TRUE,否则它将是FALSE


推荐