Почему grails-2.0.1 не может создать доменные объекты User, Role и UserRole в методе инициализации класса BootStrap? - PullRequest
2 голосов
/ 29 февраля 2012

Привет, я новичок в платформе Grails ...

Я могу создать доменные объекты User, Role и UserRole в методе инициализации класса BootStrap в grails-1.3.7-я версия с Spring Security Core Plugin ... Но не может сделать то же самое в Grails-2.0.1 версии ..

Ниже приведен код, который я пытаюсь выполнить ...

import com.beshto.Role
import com.beshto.User
import com.beshto.UserRole
import grails.util.Environment

class BootStrap {

  def init = {  servletContext ->
    switch (Environment.current) {
      case Environment.DEVELOPMENT:
        createInitialUsersIfRequired()
        break;
      case Environment.PRODUCTION:
        println "No special config or Bootstrapping required for the Production version..."
        break;
    }
  }

  def destroy = {
  }

  void createInitialUsersIfRequired() {
    println "Creating special config / Bootstrapping for Development version admin/4321 and user/1234..."

    if(Role.list().size() == 0) {
      new Role(authority: 'ROLE_ADMIN').save(flush: true)
      new Role(authority: 'ROLE_USER').save(flush: true)
    }

    if(User.count() == 0){
      def newAdmin = new User(username: 'admin', enabled: true, password: '4321').save(flush: true)
      def newUser = new User(username: 'user', enabled: true, password: '1234').save(flush: true)

      UserRole.create newAdmin, Role.findByAuthority('ROLE_ADMIN'), true
      UserRole.create newUser, Role.findByAuthority('ROLE_USER'), true

      assert User.count() == 2
      assert Role.count() == 2
    }
  }
}

Любая ПОМОЩЬ будет высоко оценена!

Ответы [ 2 ]

2 голосов
/ 13 сентября 2012

Проверьте метод создания роли.Попробуйте изменить:

new Role(authority: 'ROLE_ADMIN').save(flush: true)

для

new Role(authority: 'ROLE_USER').save(failOnError: true)

И тот же случай для пользователей.Например:

new User(username: 'admin', enabled: true, password: '4321').save(failOnError: true)

вместо

new User(username: 'admin', enabled: true, password: '4321').save(flush: true)
0 голосов
/ 20 апреля 2012

Я пришел сюда с той же проблемой и играл с ней до тех пор, пока она не сработала.

Я не уверен на 100%, какие изменения заставили его работать, но вот что я сделал:

  1. Изменены цитаты, чтобы они были двойными, так что вместо ". Username: 'admin" будет имя пользователя: "admin"

Я подумал, что это может вызывать некоторые проблемы с Java. Я неОбязательно.

Убедитесь, что ваш пользователь и роль действительно сохранены! Добавьте ошибку при ошибке, как рекомендовано выше.

Затем перейдите к своим классам User, Role и UserRole и убедитесь, что каждая переменнаято, что вы определили, фактически устанавливается. Даже если у вас нет никаких ограничений, если у вас есть строка, просто присвойте ей "" пустую строку. Причина может заключаться в том, что, хотя он может принимать пустые строки, он может не приниматьпустые строки.

Это было то, что решило это для меня. Это было очень трудно решить, потому что не было никакого ценного вывода из терминала, и мне приходилось думать о разных вещах.

Я надеюсь, чтоэто решает вашу проблему.Вероятно, это связано с сохранением с ограничениями на полях объекта, который не выполняется.

Дайте мне знать, если это не работает, и попробуйте предоставить дополнительную информацию.

Удачи!

...