我已经找到了如何散列某个密码并使用SpringMVC将其保存在数据库中:
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String pw = passwordEncoder.encode("test");
现在的问题是,我如何验证来自请求的密码,让用户登录我的网络应用程序? 经过一些研究,我看到,有很多方法可以做到这一点。一些解决方案适用于用户角色。
我的webapps应该做的是为我的用户提供一个他们可以注册的登录页面(这里我将使用上面显示的代码保存密码)。后 注册他们应该能够登录,这意味着我需要从登录表单验证密码。 那里有没有最先进的例子?
答案 0 :(得分:10)
这是原始密码与编码密码匹配的方式:
{{1}}
但正如其他人所说,自行编码安全性很麻烦,因此我建议使用Spring Security。是的,它确实需要学习,但你可以找到很好的教程。 Here是一个独特的教程(免责声明:我是作者)。
答案 1 :(得分:1)
这是我在春季实现自己的更改密码功能时使用的
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和encodePassword = $ 2a $ 10 $ zxvEq8XzYEYtNjbkRsJEbukHeRx3XS6MDXHMu8cNuNsRfZJWwswDy
代码就像(在Utility类的某些自动装配对象上调用):
doPasswordsMatch( rawPassword, encodedPassword );
如果密码匹配,它将返回TRUE,否则将为FALSE
答案 2 :(得分:0)
要验证用户输入了正确的密码,请对输入的值使用相同的单向散列,然后将其与之前的散列值进行比较 - 如果它们相同,则输入的密码是正确的。
答案 3 :(得分:0)
身份验证和授权不是Web应用程序中的简单目标。
Spring确实有一个安全框架来帮助解决这个问题,但是使用它并不简单。
我建议您评估Apache Shiro安全框架工作(可通过ASF网站获得),该工作目前在简化Spring和Java EE的安全性方面做得最好。
它具有抽象功能,使您可以从自定义的用户信息存储中进行身份验证。有很多使用Shiro的在线简短认证教程可以帮助你。