Grails使用spring security更新嵌入对象但没有编码密码

Posted

技术标签:

【中文标题】Grails使用spring security更新嵌入对象但没有编码密码【英文标题】:Grails update embedded object but no encoding password using spring security 【发布时间】:2019-03-02 20:35:37 【问题描述】:

我正在尝试更新一个嵌入对象,但是当对象更新时,密码用户再次被编码。

我想将 Card 对象更新为 User 类。 UserService 应该只更新卡片对象,但它正在更新密码对象。

UserPasswordEncoderListener 是 grails spring 安全核心插件的默认值。

使用:

grailsVersion=3.3.8 grailsWrapperVersion=1.0.0 gormVersion=6.1.10.RELEASE gradleWrapperVersion=3.5 mongodb:6.1.6

有什么想法吗?或者我做错了什么? 处理嵌入对象的最佳方法是什么?

github bug

用户类

客户类别

卡类

用户服务类

用户密码编码器监听器

【问题讨论】:

【参考方案1】:

看起来密码也在某处更新,所以 UserPasswordEncoderListener 中的 u.isDirty( 'password' ) 返回 true

您应该能够通过将其设置为 null 来禁止密码更新。

【讨论】:

以上是关于Grails使用spring security更新嵌入对象但没有编码密码的主要内容,如果未能解决你的问题,请参考以下文章

带有 Spring Security Core 的 Grails 仅允许所有者在 GSP 中更新

Grails:乐观锁定,StaleObjectStateException 与 Spring Security 会话中的域,更新计数器

Grails Spring Security 插件 - 修改登录用户的权限

Grails spring security core 3.1.2 和 mongodb

grails spring-security-ui 插件重定向回应用程序

Grails/Spring Security:无法使用新创建的用户登录