작성
·
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
안녕하세요, 이도원입니다.
말씀하신대로 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);
안녕하세요, 이도원입니다.
말씀하신 내용처럼 입력 된 password가 user-service에 처리될 때는 pwd 변수에 의해서 처리되는데, 해당 암호가 입력 되었을 때, spring-security의 passwordEncoder에 의해 암호화 된다는 의미로 설명 드렸습니다. 추가 질문사항 및 다른 이견 있으시면 글 남겨 주시기 바랍니다.
감사합니다.