[Security] UserDetails 반환 시, password 는 null 이다. 왜?
2021. 5. 17. 10:51ㆍSpring
JWT 기반 로그인을 구현하던 중...
사용자의 입력 password를 이용해 데이터를 만들고 싶었다.
그렇기에 먼저 선처리로 사용자 입력 id와 password 가 정확한지 검증을 하였는데.... password 가 사라지는 것이었다.
정확히는 AuthenticationManagerBuilder에게 전달한 토큰을 Authentication 타입으로 받으면 password 가 null 이 되는 상황이다.
// 인증을 위임하기 위해, 토큰을 authenticationManagerBuilder 에게 전달
Authentication auth = authenticationManagerBuilder
.getObject()
.authenticate(usernamePasswordAuthenticationToken);
아래 사진을 보면 분명 password 가 존재하였는데,

사라졌다.....!

여러 차례 코드도 변경해보며 디버깅을 해보니 결국 원인은 UsernamePasswordAuthenticationToken 객체에서 eraseCredentials() 메서드 때문이었다.

사진 속의 credentials(=password)는 사용자가 입력한 값이지, Spring Security에서는 암호화된 값을 가지고 검증을 거칠 것이다. 그렇기에 암호화 된 값과 사용자가 입력한 "1234" 값이 같은지 검증을 완료한 후, password는 지워서 반환하는 게 흐름이다.
이 부분을 몰랐고, 디버깅을 애초에 Rusume 가 아닌 Step Into로 진행했으면 빨리 찾았을 문제였을 것이다.
디버깅을 잘하자.
'Spring' 카테고리의 다른 글
| [Lombok] @Builder 오류 - InvalidDefinitionException (0) | 2021.04.08 |
|---|---|
| Spring Rest Docs 적용 (1) (0) | 2021.03.02 |