我的Grails 3.3.8应用程序中SpringSecurityService中的MissingPropertyException

时间:2018-09-10 19:48:03

标签: hibernate grails spring-security gorm

使用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中有效,并且我需要更改很多代码使用上面的方法,希望能很快解决,谢谢。

1 个答案:

答案 0 :(得分:0)

此修复程序似乎正在将GORM从6.1.9.RELEASE升级到6.1.10.RELEASE。在升级说明中没有看到任何迹象表明这是一个已知的错误,因此无法评论GORM中的确切问题。

编辑: 此处记录的问题-https://github.com/grails/grails-data-mapping/issues/1072