Shiro - 如何使用哈希密码登录

时间:2013-04-09 03:22:18

标签: login shiro

我正在使用Shiro来保护我的应用程序,现在问题是如何使用哈希密码登录以下方案:

1,用户点击激活邮件后自动登录。

2,通过Facebook登录,通过facebookId从数据库中找到用户,并尝试登录,但我只有哈希密码,我们有办法解密哈希密码。

这是我如何加密存储在数据库中的密码:

new Sha256Hash(password).toHex()

以下是我的登录代码。

Subject currentUser = SecurityUtils.getSubject();
if (!currentUser.isAuthenticated()) {
    UsernamePasswordToken token = new UsernamePasswordToken(email, password, rememberMe);
    currentUser.login(token);
}

如果这个问题很奇怪,请耐心等待,并提前感谢。

2 个答案:

答案 0 :(得分:0)

哈希函数的目的是不可加密。所以不,它不能被解密。要实现这两个目标,您可以配置其他领域。一个用于电子邮件激活,另一个用于oauth登录。

对于电子邮件激活,您可以创建临时帐户,创建一些随机激活令牌并发送电子邮件。然后,用户单击激活链接,应用程序尝试使用http请求中提供的令牌对用户进行身份验证:

String token = //get from request
subject.authenticate(new ActivationToken(token));

激活领域检查此令牌是否有效。如果有效,它会从帐户中删除令牌并对其进行身份验证。

对于facebook领域,你可以使用outh认证步骤获得的秘密来获取用户信息,如果没有erros认证用户。

答案 1 :(得分:0)

默认情况下,来自UsernamePasswordToken的密码进行散列并将结果与​​来自DB的散列进行比较。 你可以改变你的境界。没有制作哈希。

对于通常的登录,您可以创建密码哈希并将其放入UsernamePasswordToken。而在领域只比较哈希