我正在尝试更新我的用户DTO的一个字段,但是每次我通过执行userService.save( user )进行更新时,我的登录凭据在数据库中变得无效,因为当我第一次获取用户时,我会在DTO的password字段中获得加密的密码,而当我再次保存该用户时,我会重新加密加密的密码,从而使密码与以前不同。
我该如何着手解决这个问题呢?当我第一次在我的用户服务中查询数据库时,我应该解密密码吗?这样安全吗?
编辑:我发现你不能破译密码(我用的是BCryptPasswordEncoder)。有没有办法在不影响密码的情况下更新我所有的字段?
发布于 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.
发布于 2019-10-11 15:07:23
您应该使用实体侦听器。
创建实体监听器类,实现preUpdate方法。
您应该将applicationContext注入到类中。你可以找到bean "passwordEncoder“。Spring使用它来编码密码。
在pre update方法中,你会得到你的原始密码,创建像passwordEncoder.encode( password )这样的编码版本,并将其设置回实体。
https://stackoverflow.com/questions/58334809
复制相似问题