gpt4 book ai didi

Grails 在 SecurityFilters 中使用 Spring Security

转载 作者:行者123 更新时间:2023-12-02 15:01:54 25 4
gpt4 key购买 nike

在生产服务器中的 grails 应用程序中,我遇到了一些问题。
在 securityFilters 我正在注入(inject) springSecurityService 并且在某些时候我会问类似的东西

if(springSecurityService?.currentUser?.client){
...
}

但系统抛出一个错误
Error 500: Internal Server Error
Class
org.hibernate.LazyInitializationException
Message
could not initialize proxy - no Session
Trace
Line | Method
->> 32 | doCall in SecurityFilters$_closure1_closure2_closure4
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 82 | doFilterInternal in com.linkedin.grails.profiler.ProfilerFilter
| 190 | invoke . . . . . in org.apache.jk.server.JkCoyoteHandler
| 291 | invoke in org.apache.jk.common.HandlerRequest
| 776 | invoke . . . . . in org.apache.jk.common.ChannelSocket
| 705 | processConnection in ''
| 898 | runIt . . . . . . in org.apache.jk.common.ChannelSocket$SocketConnection
^ 636 | run in java.lang.Thread

第 32 行是我调用上述 if 语句的地方。你知道如何解决这个 LazyInitializationException 吗?我做错了什么?

注意:“client”是该用户所属的域类,但在 Person 的 belongsTo 参数中没有提及

谢谢。

最佳答案

该事件在 Controller 的 Hibernate session 之外运行,因此当您加载用户时,它会立即断开连接,并且延迟加载的集合或多对一引用将无法解析。解决此问题的最简单方法是将用户加载调用包装在 withTransaction block 中 - 它使 Hibernate session 始终保持打开状态:

AnyDomainClass.withTransaction { status ->
if (springSecurityService?.currentUser?.client) {
...
}
}

关于Grails 在 SecurityFilters 中使用 Spring Security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13269892/

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