我的 Grails 3.3.8 应用程序中 SpringSecurityService 中的 MissingPropertyException
Posted
技术标签:
【中文标题】我的 Grails 3.3.8 应用程序中 SpringSecurityService 中的 MissingPropertyException【英文标题】:MissingPropertyException in SpringSecurityService in my Grails 3.3.8 application 【发布时间】:2019-02-15 06:51:15 【问题描述】:使用 grails spring 安全插件 (3.2.3) 我有一个应用程序,其中包含使用本指南创建的标准域类:
https://grails-plugins.github.io/grails-spring-security-core/3.2.x/index.html#tutorials
教程中指定了以下类:
Role.groovy、UserRole.groovy 和 User.groovy。
User.groovy 还添加了以下代码:
static belongsTo = [store: Store]
我还添加了两个额外的域类:
Store.groovy:
package com.mycompany.myapp
class Store
String name
static constraints =
BookShop.groovy:
package com.mycompany.myapp
class BookShop extends Store
Boolean isOpen
static constraints =
我在 Bootstrap.groovy 中创建了一个用户:
def init =
def adminRole = new Role(authority: 'ROLE_ADMIN').save()
def testBookShop = new BookShop(name: "BookShop", isOpen: true).save()
def testUser = new User(username: 'me', password: 'password', store: testBookShop).save()
UserRole.create testUser, adminRole
UserRole.withSession
it.flush()
it.clear()
assert User.count() == 1
assert Role.count() == 1
assert UserRole.count() == 1
我将 spring 安全服务注入 SecureController.groovy 并尝试呈现以下内容:
package com.mycompany.myapp
import grails.plugin.springsecurity.annotation.Secured
class SecureController
def springSecurityService
@Secured('ROLE_ADMIN')
def index()
def currentUser = springSecurityService.currentUser
render 'Store: ' + currentUser.store.name + ' is open = ' + currentUser.store.isOpen
我收到以下错误:
2018-09-10 20:34:26.068 ERROR --- [nio-8080-exec-2]
o.g.web.errors.GrailsExceptionResolver : MissingPropertyException
occurred when processing request: [GET] /secure/index
No such property: isOpen for class: com.mycompany.myapp.BookShop
如果我专门打开商店的包装,我可以让它工作:
render 'Store: ' + currentUser.store.name + ' is open = ' +
GrailsHibernateUtil.unwrapIfProxy(currentUser.store).isOpen
只是想知道是否有更好的解决方案来解决这个问题,我正在将一个大型应用程序从 grails 2.5.5 更新到 3.3.8,这在 2.5.5 中有效,我需要更改很多代码使用上面的方法,希望能快速解决,谢谢。
【问题讨论】:
您好,我看不到您问题的原因,我只是重新创建了您在问题中描述的场景,grails 版本,相同的 spring 安全插件版本。如果看起来不错,请查看此存储库github.com/ilmoralito/springsecurityserviceexample,我按照您的示例进行操作并验证没有问题。也许你通过了一些微妙的被忽视的东西。问候 您好 user615274,您已经解决了我的问题,问题似乎与我使用的 GORM 版本有关,如果您在 github 项目中将其更改为以下内容,您应该能够重新创建:gormVersion =6.1.9.RELEASE 当我将其更改为 6.1.10.RELEASE 时,问题似乎消失了,谢谢。 好消息,我很高兴它现在可以工作了 【参考方案1】:修复似乎是将 GORM 从 6.1.9.RELEASE 升级到 6.1.10.RELEASE。在升级说明中没有看到任何内容表明这是一个已知错误,因此无法评论 GORM 中的确切问题。
编辑: 此处记录的问题 - https://github.com/grails/grails-data-mapping/issues/1072
【讨论】:
以上是关于我的 Grails 3.3.8 应用程序中 SpringSecurityService 中的 MissingPropertyException的主要内容,如果未能解决你的问题,请参考以下文章
Grails:Spring Security 插件对于简单的安全性来说是不是过于强大