• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

UserDto 의 pwd 값 관련

23.01.17 18:31 작성 23.01.18 09:00 수정 조회수 341

4

안녕하세요. 좋은강의 감사합니다.

다름이 아니라 강의에서 설명하실때는

getUserDetailsByEmail 메소드에서 UserEntity 를 UserDto로 맵핑할때

클라이언트가 입력한 password를 Spring Security 가 UserDto의 pwd 파라미터에 암호화하여 넣어준다는 식으로 말씀하신거 같습니다.

@Override
public UserDto getUserDetailsByEmail(String userName) {
    UserEntity userEntity = userRepository.findByEmail(userName);
    if(userEntity == null)
        throw new UsernameNotFoundException(userName);
    UserDto userDto = new ModelMapper().map(userEntity,UserDto.class);

    return userDto; 

그게 아니라 단지, ModelMapper 에 STRICT 설정을 해주지 않아서 UserDto의 pwd와 encrytedpwd 값이 모두 UserEntity의 password 값으로 들어간게 아닌가 해서 질문드립니다.

 

답변 2

·

답변을 작성해보세요.

1

안녕하세요, 이도원입니다.

말씀하신대로 ModelMapper에 아래와 같이 MachingStrategy를 지정하지 않으면, UserENtity의 encryptedPwd 값이 UserDto의 pwd와 encryptedPwd에 저장될 수 있습니다. 따라서, 아래와 같이 MachingStrategies.STRICT를 지정하시는 게 좋을 것 같습니다. 관련 코드는 github에 반영되어 있으니 참고하시기 바랍니다.

mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT)

추가로, getUserDetailsByEmail 메소드에서는 인증이 완료된 사용자에 대해 JWT를 발급하기 위한 용도로 사용되고 있습니다.

감사합니다.

 

0

김광수님의 프로필

김광수

2024.04.14

답변 감사합니다. ㅠㅠ 강의내용을 따라 하고 있는데.. 오늘 pwd 때문에 여러 번 고생하네요. 값이 null 이어야 하는데.. 강의내용엔 아래 코드에 의해서 암호화 된다고 해서 엄청 헤맸습니다.

 

authenticationManagerBuilder.userDetailsService(userService).passwordEncoder(bCryptPasswordEncoder);

안녕하세요, 이도원입니다.

말씀하신 내용처럼 입력 된 password가 user-service에 처리될 때는 pwd 변수에 의해서 처리되는데, 해당 암호가 입력 되었을 때, spring-security의 passwordEncoder에 의해 암호화 된다는 의미로 설명 드렸습니다. 추가 질문사항 및 다른 이견 있으시면 글 남겨 주시기 바랍니다.

감사합니다.