spring security 셋팅을 다하고
provider에서 로그인 인증을 할것이다.
근데 여기서 에러가 나면
UsernameNotFoundException이 나도
BadCredentials Exception 무조건 이걸로 떨어진다.
이건 security 기본 셋팅이 이렇게 되어있어서 그렇다.
AbstractUserDetailsAuthenticationProvider의 authenticate()안에서
UsernameNotFoundException을 BadCredentials Exception이걸로 돌려버린다.
그래서 최종적으로는 BadCredentials Exception 이걸로 다 떨어진다.
보안성 때문에 이렇게 되어있다고 하는데...
이게 싫다면 방법은 2가지가 있습니다.
WebSecurityConfig에서 설정을 통해서
setHideUserNotFoundExceptions을 false로 설정한다.
public DaoAuthenticationProvider daoAuthenticationProvider() {
...
authenticationProvider.setHideUserNotFoundExceptions(false);
return authenticationProvider;
}
이런식으로 설정해준다.
내가 security 설정을 아예 못건드리는 상황이다. 하면 코드에서 해야지...
authenticate()에서 UsernameNotFoundException -> BadCredentials Exception 으로 돌려 버리므로
이 authenticate()매서드가 실행되기 전에 처리를 해버리면 된다.
public ResponseEntity<?> login(UserRequestDto.Login login) {
if (!usersRepository.findByName(login.getName())) {
return response.fail("해당하는 유저가 존재하지 않습니다.", HttpStatus.BAD_REQUEST);
}
...
Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken);
}
좀 보기에는 싫지만 설정을 못건드리면 이렇게라도 해야지..