인프런 커뮤니티 질문&답변

mindecco님의 프로필 이미지
mindecco

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Users Microservice - 로그인 성공 처리

UserDto 의 pwd 값 관련

작성

·

463

·

수정됨

5

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

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

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

2

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

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

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

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

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

감사합니다.

 

1

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

 

authenticationManagerBuilder.userDetailsService(userService).passwordEncoder(bCryptPasswordEncoder);
Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

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

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

감사합니다.

mindecco님의 프로필 이미지
mindecco

작성한 질문수

질문하기