Плагин Spring Security не работает более чем с одним.Зачем? - PullRequest
0 голосов
/ 31 декабря 2011

У меня есть такой класс:

class User {
    String name;
    String password;    
    static hasMany = [ authorities : testing.Role ]
    static belongsTo = Role
    static constraints = {
    name(unique:true,size:4..10)
    }
}

Я настроил Spring Security Plugin (acegi), и он работает, как и ожидалось.Но проблема в том, что когда я изменяю свой belongsTo в User классе на что-то вроде этого:

static belongsTo = [ Role , company : Company]

И я пытался запустить grails run-app Я получаю ошибку, подобную этой:

/home/anto/anto/test/testing/grails-app/domain/testing/User.groovy: 7: Unexpected node type: EXPR found when expecting type: LABELED_ARG at line: 7 column: 25. File: /home/anto/anto/test/testing/grails-app/domain/testing/User.groovy @ line 7, column 25.
       static belongsTo = [Role , company : Company ] 
                           ^

1 error

Почему этот синтаксис выдает ошибку?Где я допустил ошибку?

Редактировать:

Теперь, получив ответы от немногих, я изменил свой код на:

static belongsTo = [ role: Role , company : Company]

Но на этот раз я получаюеще большая ошибка!

2011-12-31 14:23:57,304 [Thread-9] ERROR context.ContextLoader  - Context initialization failed 
Message: Error creating bean with name 'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.codehaus.groovy.grails.exceptions.GrailsDomainException: No owner defined between domain classes [class testing.Role] and [class testing.User] in a many-to-many relationship. Example: static belongsTo = testing.User 
   Line | Method 
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   138 | run      in java.util.concurrent.FutureTask 
|   886 | runTask  in java.util.concurrent.ThreadPoolExecutor$Worker 
|   908 | run      in     '' 
^   662 | run . .  in java.lang.Thread 

Caused by GrailsDomainException: No owner defined between domain classes [class testing.Role] and [class testing.User] in a many-to-many relationship. Example: static belongsTo = testing.User 
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   138 | run      in java.util.concurrent.FutureTask 
|   886 | runTask  in java.util.concurrent.ThreadPoolExecutor$Worker 
|   908 | run      in     '' 
^   662 | run . .  in java.lang.Thread 
| Error 2011-12-31 14:23:57,401 [Thread-9] ERROR context.GrailsContextLoader  - Error executing bootstraps: Error creating bean with name 'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.codehaus.groovy.grails.exceptions.GrailsDomainException: No owner defined between domain classes [class testing.Role] and [class testing.User] in a many-to-many relationship. Example: static belongsTo = testing.User 
Message: Error creating bean with name 'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.codehaus.groovy.grails.exceptions.GrailsDomainException: No owner defined between domain classes [class testing.Role] and [class testing.User] in a many-to-many relationship. Example: static belongsTo = testing.User 
   Line | Method 
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   138 | run      in java.util.concurrent.FutureTask 
|   886 | runTask  in java.util.concurrent.ThreadPoolExecutor$Worker 
|   908 | run      in     '' 
^   662 | run . .  in java.lang.Thread 

Caused by GrailsDomainException: No owner defined between domain classes [class testing.Role] and [class testing.User] in a many-to-many relationship. Example: static belongsTo = testing.User 
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   138 | run      in java.util.concurrent.FutureTask 
|   886 | runTask  in java.util.concurrent.ThreadPoolExecutor$Worker 
|   908 | run      in     '' 
^   662 | run . .  in java.lang.Thread

Теперь, что происходит?

Но если я сделаю что-то вроде этого:

static belongsTo = Role

Все работает нормально.И я не знаю, почему предыдущий синтаксис выдал такую ​​ошибку!

Я новичок в Grails и мне нужна помощь.

Примечание: Я использую Grails 2.0

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 31 декабря 2011

Это вообще не проблема безопасности, это проблема GORM. [ Role , company : Company] не имеет смысла, поскольку вы смешиваете синтаксис Groovy's List ([Foo, Bar, Baz]) с его синтаксисом Map ([foo: Foo, bar: Bar, baz: Baz]). Вы должны выбрать один.

2 голосов
/ 31 декабря 2011

Должно ли это быть static belongsTo = [role: Role , company : Company ]?

0 голосов
/ 07 марта 2012

Трассировка стека, похоже, указывает на то, что проблема в другой стороне отношения. Как выглядят классы ролей и компаний? Они оба должны иметь свойство типа «Пользователь пользователя»

...