只读模式(FlushMode.MANUAL)中不允许写入操作:使用grails hibernate

时间:2011-03-24 06:40:38

标签: java hibernate grails spring-security

我已将spring安全插件与我的grails应用程序集成,后者已将hibernate作为ORM工具...

使用spring安全插件,我的应用程序一切正常,包括身份验证,授权......

但是最近我遇到了一个我面临一些问题的案例:

登录为:admin 管理员角色:ROLE_ADMIN ROLE_ADMIN权限:ROLE_ADMIN

可以访问每个URL

作为管理员用户,当我尝试更新分配给ROLE_ADMIN的权限时,它会抛出异常:

2011-03-24 10:20:14,035 [http-8080-2] ERROR errors.GrailsExceptionResolver  - Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
        at ConfigController$_closure45_closure59.doCall(ConfigController:1128)
        at ConfigController$_closure45.doCall(ConfigController:1123)
        at ConfigController$_closure45.doCall(ConfigController)
        at java.lang.Thread.run(Thread.java:619)

可能是因为我正在尝试更新登录用户自己的权限......

在我使用hibernate保存/更新/删除任何对象的任何地方的代码内部,我都证明了flush:false,例如:

user.save flush:false

所以我想知道有没有办法登录用户能够更新也会反映他/她自己的权限..

提前致谢..

1 个答案:

答案 0 :(得分:1)

更改用户的角色权限后调用springSecurityService.reauthenticate。在链接页面的“reauthenticate”部分也是一个很好的代码片段,可以回答你的问题。