BadCredentials Exception만 발생

-·2023년 11월 25일

Spring security BadCredentials Exception만 발생

spring security 셋팅을 다하고

provider에서 로그인 인증을 할것이다.

근데 여기서 에러가 나면

UsernameNotFoundException이 나도

BadCredentials Exception 무조건 이걸로 떨어진다.

원인

이건 security 기본 셋팅이 이렇게 되어있어서 그렇다.

AbstractUserDetailsAuthenticationProvider의 authenticate()안에서

UsernameNotFoundException을 BadCredentials Exception이걸로 돌려버린다.

그래서 최종적으로는 BadCredentials Exception 이걸로 다 떨어진다.

보안성 때문에 이렇게 되어있다고 하는데...

해결방법

이게 싫다면 방법은 2가지가 있습니다.

setHideUserNotFoundExceptions

WebSecurityConfig에서 설정을 통해서

setHideUserNotFoundExceptions을 false로 설정한다.

public DaoAuthenticationProvider daoAuthenticationProvider() {
	...
    authenticationProvider.setHideUserNotFoundExceptions(false);
    return authenticationProvider;
}

이런식으로 설정해준다.

authenticate() 메서드 발생 전 처리

내가 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);
}

좀 보기에는 싫지만 설정을 못건드리면 이렇게라도 해야지..

profile
거북이는 오늘도 걷는다

0개의 댓글