본문 바로가기

Study/개발일지

[백엔드TIL] Spring security 로그인 실패 시 예외처리 방식(78일차)

스프링 시큐리티로 로그인기능을 구현하다가 어떤 이유에서든지 로그인에 실패하면 로그에 아무것도 안뜨길래 뭔가 설정을 잘못한 줄 알았다.

분명 에러 로그가 떠야하는데 안뜬다.

로그 범위를 디버그로 하면 겨우 보이는데 다른로그들이 엄청나게 튀어나온다.


딱 한줄 보여준다...

 

세션에서 확인해봤다.


친절하게도 BadCredentialsException : 자격증명에 실패했다고 알려준다.

없는 아이디를 입력했으므로 UsernameNotFoundException을 기대했지만 BadCredentialsException이 떴다

로그를 찍어보면


분명 'org.springframework.security.core.userdetails.UsernameNotFoundException'이 발생했다.

 

BadCredentialsException으로 변경된 이유는 AbstractUserDetailsAuthenticationProvider의 authenticate함수에서 발견할 수 있었다.

UsernameNotFoundException이 터졌을때, hideUserNotFoundExceptions변수가
false면 그대로 에러를 던지고, 아니라면 BadCredentialsException를 생성해서 던진다.
hideUserNotFoundExceptions변수의 기본값이 true기때문에 BadCredentialsException이 터진 것이다.

이유를 좀 찾아보니 보안때문이란다.
아이디가 틀린경우 UsernameNotFoundException, 비밀번호가 틀린 경우엔 BadCredentialsException이 터지는데 둘중에 뭐가 틀렸는지 알려주는것보단 그냥 둘중에 하나 틀린거 있는데? 라고 말하는게 보안 측면에서 좋다는 것이다.
듣고보니 확실히 일리있는말이다.

728x90