Как кодировать пароль при отображении из DTO в сущность? - PullRequest
0 голосов
/ 17 апреля 2019

В приложении Spring Boot я хочу сопоставить простое (логин, пароль) UserDTO с пользовательской сущностью, используя Orika Mapper.Я понятия не имею, как кодировать пароль, вызывая метод PasswordEncoder.encode при отображении.Должен ли я использовать другой картограф?

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Например, если ваша сущность имеет вид

@Entity
public class User{
 private long id;
 private String username;
 private String encodedPassword;

 //getters and setters
}

, а ваш UserDTO равен

public class UserDTO{
 private String username;
 private String plainPassword;
 //getters and setters
}

В вашем классе контроллера или службе вы можете сделать что-то вроде

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
...
@Controller
public class UserController{
...
@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;

@PostMapping ...
public ResponseEntity<?> register(@RequestBody UserDTO dto){
User user = new User();
user.setUsername(dto.getUsername());
//Following line encodes password and set it for Entity
user.setEncodedPassword(bCryptPasswordEncoder.encode(dto.getPlainPassword()));

...

}
}
1 голос
/ 17 апреля 2019

Перед привязкой к сущности вы можете использовать кодировщик по умолчанию Spring5, который работает следующим образом:

  @Override
    protected void configure(AuthenticationManagerBuilder auth) 
      throws Exception {
        auth.inMemoryAuthentication()
          .withUser("user")
          .password("password")
          .roles("USER");
    }

Более подробную информацию вы можете проверить здесь https://www.baeldung.com/spring-security-5-default-password-encoder

...