我有一个grails 1.2应用程序,我想使用声明性安全性来限制基于角色的访问。我决定尝试shiro,安装插件,但是当我尝试进行身份验证时,消息“无效的用户名和/或密码”显示在标题中。我检查数据库条目,用户在那里使用sha'ed密码。控制台和堆栈跟踪文件中都不显示任何消息。我将“warn'org.jsecurity'”添加到Config.groovy,但没有结果。有什么提示/技巧可以解决这个问题吗?
答案 0 :(得分:1)
我也遇到了这个问题......你是如何为用户保存密码的?运行快速启动后,我按照Shiro插件页面上的示例,将下面的代码添加到我的bootstrap init方法中:
import org.apache.shiro.crypto.hash.Sha512Hash
def user = new ShiroUser(username: "user123", passwordHash: new Sha512Hash("password").toHex())
user.save()
我会尝试登录并继续登录失败。所以我试过
def user = new ShiroUser(username:'admin', passwordHash:new Sha256Hash("admin").toHex())
user.save()
从Sha512Hash改为Sha256Hash后......我能够登录了!
更新:在运行“快速启动”后,刚刚创建了一个带有默认Shiro插件设置的新应用。如果您要创建用户,则需要使用Sha256Hash开箱即用。但是,您可以通过将bean添加到Spring的resources.groovy文件中来使用Sha512Hash或Sha1Hash。
Sha512Hash示例:
beans = {
bean {
credentialMatcher(Sha512CredentialsMatcher) {
storedCredentialsHexEncoded = true
}
}
}
答案 1 :(得分:0)
你开始快速启动了吗?您使用的是默认数据库领域吗?
我会通过您正在使用的Realm进行调试,看看发生了什么。
答案 2 :(得分:0)
我无法帮助解决shiro故障,但如果您正在寻找更强大的解决方案,您可能需要检查灵活。它基于shiro,提供了许多额外的功能和灵活性。
您可以安装最新的:
grails install-plugin nimble 0.4-SNAPSHOT