엔지니어로 가는 길

Spring security BadCredentialException의 원인 및 해결 방법 본문

프로그래밍/Spring

Spring security BadCredentialException의 원인 및 해결 방법

탐p슨 2021. 8. 26. 23:04
728x90

문제 상황

로그인 정보를 제대로 입력했음에도 기대한 응답이 나오지 않았다.

분명 DB에 사용자 정보를 저장하였고, 저장된 정보를 POST 메소드에 담아 보냈는데 말이다.

 

 

정상적으로 코드가 동작한다면 응답 본문에 어떤 정보가 나와야 하는데,

위와 같이 응답 본문에 아무것도 뜨지 않았다.

('어떤 정보'라는 것은 BadCredentialException과 관련 없으므로 무시한다.)

 

로그에 에러가 보이지 않아서 디버거를 통해 따라가보았다.

 

CustomAuthenticationFilter.class (extends UsernamePasswordAuthenticationFilter)

 

attemptAuthentication 메소드를 수행하는 중에 BadCredentialException이 발생하였다.

 

원인

왜 BadCredentialException이 발생한 것일까.

 

SecurityConfig.class (extends WebSecurityConfigurerAdapter)

 

원인은 password encoder를 BCryptPasswordEncoder로 설정해놓고서는,

 

AppRunner.class (extends ApplicationRunner)

 

DB에 저장할 때는 패스워드를 encoding하지 않고 DB에 저장했기 때문이다.

콘솔을 다시 자세히 보니 아래와 같은 로그가 찍혀있었다.

 

 

해결 방법

패스워드를 지정한 password encoder로 encoding하고 DB에 저장하면 된다.

 

AppRunner.class (extends ApplicationRunner)

 

AccountService.class

 

 

BadCridentialException이 해결되어 성공적으로 인증이 이루어졌다.

(앞서 말한 '어떤 정보'란 JWT였다.)

728x90
Comments