gpt4 book ai didi

security - Grails Spring Security 插件 - 与用户域一对一关联

转载 作者:行者123 更新时间:2023-12-03 06:31:42 26 4
gpt4 key购买 nike

我正在使用 Spring Security 插件来管理 Grails 应用程序中的成员资格和身份验证。

我正在尝试通过一对一关联将用户域类与配置文件域相关联。

我在 User.groovy 上添加了这些行:

static hasOne = [userProfile:UserProfile]
static constraints = {
//...
userProfile unique:true
}

和UserProfile.groovy:

User user

唉,我在调用 UseRole.create(user,role) 时遇到错误。

有一些关于如何获得我正在寻找的相同功能的最佳实践。特别是,我希望将任何用户与一个配置文件对象相关联以扩展它。

然后我还想添加与帖子和其他表的一对多关系...

谢谢最好的问候

PS:我收到此错误:

配置 Spring Security UI ...2011-03-08 12:18:51,179 [main] 错误 context.GrailsContextLoader - 执行 Bootstrap 时出错:nulljava.lang.NullPointerException 在 $Proxy19.save(来源未知) 在 com.dromedian.xxxxx.security.UserRole.create(UserRole.groovy:32) 在 com.dromedian.xxxxx.security.UserRole$create.call(来源未知) 在 BootStrap$_closure1.doCall(BootStrap.groovy:20) 在 grails.util.Environment.evaluateEnvironmentSpecificBlock(Environment.java:251) 在 grails.util.Environment.executeForEnvironment(Environment.java:244) 在 grails.util.Environment.executeForCurrentEnvironment(Environment.java:220) 在 org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:212) 在 grails.web.container.EmbeddableServer$start.call(来源未知) 在 _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy:158) 在 _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy) 在 _GrailsS​​ettings_groovy$_run_closure10.doCall(_GrailsS​​ettings_groovy:280) 在 _GrailsS​​ettings_groovy$_run_closure10.call(_GrailsS​​ettings_groovy) 在 _GrailsRun_groovy$_run_closure5.doCall(_GrailsRun_groovy:149) 在 _GrailsRun_groovy$_run_closure5.call(_GrailsRun_groovy) 在 _GrailsRun_groovy.runInline(_GrailsRun_groovy:116) 在 _GrailsRun_groovy.this$4$runInline(_GrailsRun_groovy) 在 _GrailsRun_groovy$_run_closure1.doCall(_GrailsRun_groovy:59) 在 RunApp$_run_closure1.doCall(RunApp.groovy:33) 在 gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381) 在 gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415) 在 gant.Gant$_dispatch_closure7.doCall(Gant.groovy) 在 gant.Gant.withBuildListeners(Gant.groovy:427) 在 gant.Gant.this$2$withBuildListeners(Gant.groovy) 在 gant.Gant$this$2$withBuildListeners.callCurrent(来源未知) 在 gant.Gant.dispatch(Gant.groovy:415) 在 gant.Gant.this$2$dispatch(Gant.groovy) 在 gant.Gant.invokeMethod(Gant.groovy) 在 gant.Gant.executeTargets(Gant.groovy:590) 在 gant.Gant.executeTargets(Gant.groovy:589)应用程序上下文正在关闭...

配置为:

User.groovy(由spring security插件创建的域类)

    static hasOne = [userDetail:UserDetail]

static constraints = {
username blank: false, unique: true
password blank: false
userDetail unique:true
}

UserDetail.groovy

static hasOne = [user:User]
static belongsTo = User

BootStrap.groovy

    //TODO temporary added - no for production or persistent db
def adminRole = new Role(authority: 'ROLE_ADMIN').save(flush: true)
def userRole = new Role(authority: 'ROLE_USER').save(flush: true)

String password = springSecurityService.encodePassword('password')
def testUser = new User(username: 'me', enabled: true, password: password)
testUser.save(flush: true)
if(testUser != null){
UserRole.create testUser, adminRole, true
}

如果我不打电话

        UserRole.create testUser, adminRole, true

没有错误。我尝试调试,但我可以理解错误在哪里。

最佳答案

如前所述,您的测试用户不会保存,因为需要用户配置文件。用户的 save 方法将返回 null,但是,您不检查这一点。我通常将这样的方法放在:

def ensureSave(domainObject) {
if(!domainObject.save(flush:true)) {
throw new Exception("not saved successfully: $domainObject");
}
domainObject
}

然后引用如下:

ensureSave(testUser)

testUser = ensureSave(new User(...));

HTH

关于security - Grails Spring Security 插件 - 与用户域一对一关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5169752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com