스프링 시큐리티로 로그인기능을 구현하다가 어떤 이유에서든지 로그인에 실패하면 로그에 아무것도 안뜨길래 뭔가 설정을 잘못한 줄 알았다.
분명 에러 로그가 떠야하는데 안뜬다.
로그 범위를 디버그로 하면 겨우 보이는데 다른로그들이 엄청나게 튀어나온다.
딱 한줄 보여준다...
세션에서 확인해봤다.
친절하게도 BadCredentialsException : 자격증명에 실패했다고 알려준다.
없는 아이디를 입력했으므로 UsernameNotFoundException을 기대했지만 BadCredentialsException이 떴다
로그를 찍어보면
분명 'org.springframework.security.core.userdetails.UsernameNotFoundException'이 발생했다.
BadCredentialsException으로 변경된 이유는 AbstractUserDetailsAuthenticationProvider의 authenticate함수에서 발견할 수 있었다.
UsernameNotFoundException이 터졌을때, hideUserNotFoundExceptions변수가
false면 그대로 에러를 던지고, 아니라면 BadCredentialsException를 생성해서 던진다.
hideUserNotFoundExceptions변수의 기본값이 true기때문에 BadCredentialsException이 터진 것이다.
이유를 좀 찾아보니 보안때문이란다.
아이디가 틀린경우 UsernameNotFoundException, 비밀번호가 틀린 경우엔 BadCredentialsException이 터지는데 둘중에 뭐가 틀렸는지 알려주는것보단 그냥 둘중에 하나 틀린거 있는데? 라고 말하는게 보안 측면에서 좋다는 것이다.
듣고보니 확실히 일리있는말이다.
'Study > 개발일지' 카테고리의 다른 글
[백엔드TIL] Spring 스케쥴러 (80일차) (0) | 2023.09.19 |
---|---|
[백엔드TIL] Array, LinkedList에 대해 설명(79일차) (0) | 2023.09.18 |
[백엔드WIL] DB캐싱 (16주차) (0) | 2023.09.15 |
[백엔드TIL] DB로직을 최소하려면 어떻게해야할까? (77일차) (0) | 2023.09.15 |
[백엔드TIL] Mockito를 활용한 단위테스트 (76일차) (0) | 2023.09.14 |