MissingPropertyException в SpringSecurityService в моем приложении Grails 3.3.8 - PullRequest
0 голосов
/ 10 сентября 2018

Использование подключаемого модуля безопасности пружины Grails (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
}

Я внедряю свою весеннюю службу безопасности в мой 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

Мне просто интересно, есть ли какие-нибудь лучшие решения для такой сортировки, я обновляю большое приложение с версий 2.5.5 до 3.3.8, это работало в 2.5.5, и мне нужно будет изменить много кода, используяметод выше, так что надеемся на быстрое решение, спасибо.

1 Ответ

0 голосов
/ 11 сентября 2018

Исправление, по-видимому, обновляет GORM с 6.1.9.RELEASE до 6.1.10.RELEASE.В примечаниях по обновлению ничего не было сказано, что это известная ошибка, поэтому не могу прокомментировать точную проблему в GORM.

Редактировать: Здесь задокументирована проблема - https://github.com/grails/grails-data-mapping/issues/1072

...