Gostaria de saber como ficaria a parte do controller caso eu quisesse criar uma rota do tipo POST para cadastrar um usuário, com o detalhe de que, em vez de salvar a senha no seu formato original, ela seria convertida em um hash (bcrypt) e, em seguida, salva no banco de dados.
No exemplo abaixo está o código que tenho. O que deveria ser adicionado ou removido para tornar isso possível?
controller user
@PostMapping("/crateNewUserr")
@Transactional
public ResponseEntity cadastrarUsuario(@RequestBody @Valid DataUserCreate dados, UriComponentsBuilder uriBuilder) {
var user = new User(dados);
repository.save(user);
var uri = uriBuilder.path("/user/{id}").buildAndExpand(user.getId()).toUri();
return ResponseEntity.created(uri).body(new DtoCustomerReturn(user));
}
Entity
@Table(name = "users")
@Entity(name = "Users")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String login;
private String password;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return List.of(new SimpleGrantedAuthority("ROLE_USER"));
}
@Override
public String getPassword() {
return password;
}
@Override
public String getUsername() {
return login;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
DTO
package projeto.crud.joao.com.apicrud.domain.user;
public record DtoUserData(
String login,
String password
) {
}