使用注入服务序列化域实例?

Posted

技术标签:

【中文标题】使用注入服务序列化域实例?【英文标题】:Serialize Domain instance with service injected? 【发布时间】:2018-03-14 02:14:07 【问题描述】:

我有一个域对象,它跟踪使用注入的 Spring Security 服务 def springSecurityService 创建、删除和修改它的用户。这些对象的实例保存在会话中,并且在生产中会话被持久化到数据库以进行会话故障转移。 Jetty 会话存储类对会话中的对象进行序列化,但如果会话包含一个不可序列化的对象,而 springSecurityService 不是,则会引发异常。有没有办法将springSecurityService 实例标记为已忽略,transient 可能是,但仍然可以访问service?我试过了。

static transients = ['springSecurityService']

没有帮助。

【问题讨论】:

【参考方案1】:

尝试使用,

transient SpringSecurityService springSecurityService
static transients = ['springSecurityService']

第一条语句告诉Java,不要序列化;而第二个告诉 Grails 不要持久化。

注意:顺便说一句,在域类中注入服务是discouraged。

【讨论】:

请注意,Grails 团队不鼓励在 Domain 类中注入服务,因为每次从数据库加载 bean 实例时都需要注入 bean,从而降低性能:docs.grails.org/latest/guide/…跨度>

以上是关于使用注入服务序列化域实例?的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core 5 RawRabbit 序列化器/依赖注入问题

IJSRuntime 忽略服务器端 Blazor 项目中的自定义 json 序列化程序

深入理解JNDI注入与Java反序列化漏洞利用

Fastjson 反序列化 Jndi 注入利用 JdbcRowSetImpl 链

Fastjson 反序列化 Jndi 注入利用 JdbcRowSetImpl 链

如何将不可序列化的对象传递给意图服务?