Har*_*ari 7 security grails spring-security grails-orm mongodb
我正在尝试使用grails mongo插件在mongodb中持久化spring-security-acl域对象.执行以下代码行时
aclUtilService.addPermission Phone.class, phoneInstance.id, new PrincipalSid(username), BasePermission.ADMINISTRATION
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
此实现的GORM目前不支持像[executeQuery]这样的基于字符串的查询.使用标准代替.. Stacktrace如下:消息:此实现的GORM目前不支持像[executeQuery]这样的基于字符串的查询.改用标准.
任何艰难的?
**Grails Configuration Details:**
app.grails.version=2.0.3
app.name=eateri
app.servlet.version=2.5
app.version=0.1
plugins.mongodb=1.0.0.RC5
plugins.spring-security-acl=1.1
plugins.spring-security-core=1.2.7.2
Run Code Online (Sandbox Code Playgroud)
正如@sudhir提到的,aclService中有一些使用hqlexecuteQuery方法的方法,例如:
protected AclObjectIdentity retrieveObjectIdentity(ObjectIdentity oid) {
return AclObjectIdentity.executeQuery(
"FROM AclObjectIdentity " +
"WHERE aclClass.className = :className " +
" AND objectId = :objectId",
[className: oid.type,
objectId: oid.identifier])[0]
}
Run Code Online (Sandbox Code Playgroud)
但是mongodb gorm插件不支持hql,因此你的代码陷入hql错误的调用路径是这样的:
aclUtilService.addPermission -> aclService.createAcl ->retrieveObjectIdentity
以及另外两个使用 hql 的 aclService 方法:
删除条目,查找子项
因此,一个简单的解决方案是将 ACL 对象存储在 mysql 中,并启用 hibernate 与 mongodb gorm 一起工作。
另一种方法是使用元编程重写这 3 个 aclService 方法。
| 归档时间: |
|
| 查看次数: |
2103 次 |
| 最近记录: |