2016-03-25 10 views
2

私はスプリングセキュリティコア3.0.4でgrails 3.1.2ウェブサイトを作成しようとしています。Grails3スプリングセキュリティコア3はドメインオブジェクトを使用できません

私は、このページを使用している

Grails Spring Security Core

私は以下のスクリプト(私のプロジェクト名に「ウェブサイト」を置き換える)を使用:その後、私は私のBootStrap.groovyに以下を追加

grails s2-quickstart com.website User Role 
grails s2-create-persistent-token com.website.PersistentLogin 
grails s2-create-role-hierarchy-entry com.website.RoleHierarchyEntry 

を:

if(User.count()==0) { 
     Date testDate = new Date() 

     Role userRole = new Role('ROLE_USER').save() 
     Role adminRole = new Role('ROLE_ADMIN').save() 

     User user = new User("John","password").save() 
     User admin = new User("Richard","password").save() 

     UserRole.create(admin, adminRole) 
     UserRole.create(user, userRole) 

     UserRole.withSession { 
      it.flush() 
      it.clear() 
     } 

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

    } 

は、私は、ユーザーのBeanクラスの当局を見つけることができないというエラーを受け取ったので、私はgetAuthoritiを置き換えますこれで、ES法(過渡リストに追加するように動作しませんでした):

Set<Role> getAuthorities() { 
    if(this.id){ 
     return UserRole.findAllBySecUser(this)*.role 
    } 
    else{ 
     return [] as Set 
    } 
} 

それから私がしようとすると、再構築、およびのUserRoleクラスについての例外を受け取ります。

ERROR org.springframework.boot.SpringApplication - Application startup failed 
org.codehaus.groovy.runtime.metaclass.MethodSelectionException: Could not find which method <init>() to invoke from this list: 
    public com.website.UserRole#<init>(org.springsource.loaded.C) 
    public com.website.UserRole#<init>(com.website.User, com.website.Role) 
    at groovy.lang.MetaClassImpl.chooseMethodInternal(MetaClassImpl.java:3197) ~[groovy-2.4.6.jar:2.4.6] 
    at groovy.lang.MetaClassImpl.chooseMethod(MetaClassImpl.java:3134) ~[groovy-2.4.6.jar:2.4.6] 
    at groovy.lang.MetaClassImpl.createConstructorSite(MetaClassImpl.java:3434) ~[groovy-2.4.6.jar:2.4.6] 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallConstructorSite(CallSiteArray.java:91) [groovy-2.4.6.jar:2.4.6] 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60) [groovy-2.4.6.jar:2.4.6] 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235) [groovy-2.4.6.jar:2.4.6] 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:247) [groovy-2.4.6.jar:2.4.6] 
    at com.website.UserRole.create(UserRole.groovy:55) ~[main/:na] 

どうすればエラーが発生しますか?この特定のエラーが何を意味するのかはわかりません。/

答えて

2

ユーザーに検証エラーがあり、保存していないようです。あなたは2引数のコンストラクタを使用していますが、ユーザ名とパスワードだけではなく必須のプロパティがある場合、検証は失敗し、save()はnullを返します。

あなたは

User user = new User(..., ...) 
user.save() 
if (user.hasErrors()) { 
    println user.errors 
} 

にユーザを作成するためのコードを変更した場合、あなたは何が間違って表示されます。コンストラクタ呼び出しの後に行方不明のプロパティを追加します。

User user = new User(..., ...) 
user.fullName = '...' 

または1行でそれを初期化するために、伝統的な地図のコンストラクタに切り替える:

User user = new User(username: ..., password: ..., fullName: ...) 
関連する問題