首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JPA存储库& Spring安全更新对象使密码无效

JPA存储库& Spring安全更新对象使密码无效
EN

Stack Overflow用户
提问于 2019-10-11 13:34:49
回答 2查看 339关注 0票数 0

我正在尝试更新我的用户DTO的一个字段,但是每次我通过执行userService.save( user )进行更新时,我的登录凭据在数据库中变得无效,因为当我第一次获取用户时,我会在DTO的password字段中获得加密的密码,而当我再次保存该用户时,我会重新加密加密的密码,从而使密码与以前不同。

我该如何着手解决这个问题呢?当我第一次在我的用户服务中查询数据库时,我应该解密密码吗?这样安全吗?

编辑:我发现你不能破译密码(我用的是BCryptPasswordEncoder)。有没有办法在不影响密码的情况下更新我所有的字段?

EN

回答 2

Stack Overflow用户

发布于 2019-10-11 13:43:04

您是否尝试过仅更新列而不保存整个实体?Spring Data JPA文档中有一个如何创建此类查询的示例:

https://docs.spring.io/spring-data/jpa/docs/2.1.1.RELEASE/reference/html/#jpa.modifying-queries

添加:

如果有一种方法可以只保存密码而不重新加密它?如果是这样的话,您也许可以尝试:

在用户实体中获取加密的密码(导致加密的密码被加密password.

  • Update a second time).

  • Overwrite
  • in the user in the password in the user in the encrypted password in the user in the encrypted password in the User.
票数 0
EN

Stack Overflow用户

发布于 2019-10-11 15:07:23

您应该使用实体侦听器。

看这里,https://www.concretepage.com/java/jpa/jpa-entitylisteners-example-with-callbacks-prepersist-postpersist-postload-preupdate-postupdate-preremove-postremove

创建实体监听器类,实现preUpdate方法。

您应该将applicationContext注入到类中。你可以找到bean "passwordEncoder“。Spring使用它来编码密码。

在pre update方法中,你会得到你的原始密码,创建像passwordEncoder.encode( password )这样的编码版本,并将其设置回实体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58334809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档