每当我尝试更新用户角色时,它都会自动更新密码。
这是service
类:
@Service
public class UserService {
@Autowired(required=true)
private UserRepository userRepo;
@Autowired RoleRepository roleRepo;
@Autowired PasswordEncoder passwordEncoder;
public void registerDefaultUser(User user) {
Role roleUser = roleRepo.findByName("User");
user.addRole(roleUser);
encodePassword(user);
userRepo.save(user);
}
public List<User> listAll() {
return userRepo.findAll();
}
public User get(Long id) {
return userRepo.findById(id).get();
}
public List<Role> listRoles() {
return roleRepo.findAll();
}
public void save(User user) {
encodePassword(user);
userRepo.save(user);
}
}
这是controller
:
@GetMapping("/users/edit/{id}")
public String editUser(@PathVariable("id") Long id, Model model) {
User user = service.get(id);
List<Role> listRoles = service.listRoles();
model.addAttribute("user", user);
model.addAttribute("listRoles", listRoles);
return "user_form";
}
@PostMapping("/users/save")
public String saveUser(User user) {
user.getPassword();
service.save(user);
return "redirect:/users";
}
我想只更新角色,而不更改用户设置的密码。
1条答案
按热度按时间icnyk63a1#
在保存为您的安全函数上的密码更改总是调用
encodePassword(user);
。您可以通过多种方式防止这种情况。1.给予用户的编辑函数一个独立于创建的端点,并在服务中创建一个更新函数,该函数不调用
encodePassword(user)
函数。1.不要在post中使用模型实体,不要引入一个保存用户所有可修改字段的bean,然后在保存函数中检查是否给出了新密码,然后只更改用户密码。