[Spring] principalName cannot be empty 에러

2022. 8. 25. 20:30개발공부 기강잡자/Java&Spring

Spring Security를 사용하여 OAuth 로그인을 구현하던 중, 로그인 처리 부분에서 principalName cannot be empty 에러가 발생했다.

UserDetails 인터페이스를 구현한 class에서 getUsername()의 내용을 구현하지 않았기 때문에 났다.

	@Override
	public String getUsername() {
		return null;
	}

return null로 되어있던 부분을

	@Override
	public String getUsername() {
		return siteUser.getUsername();
	}

유저의 username을 리턴하도록 수정했더니 에러가 사라지고 로그인 처리가 무사히 되었다.


이유가 무엇일까?

우선 UserDetails 인터페이스는 Spring Security 에서 로그인 사용자의 정보를 담는 인터페이스이다.

Spring Security에서 UserDetailsUserDetailsService는 중요한 부분이라고 생각되기 때문에 따로 포스팅할 예정이라 본 포스팅에서는 간단하게만 다뤄보려고 한다.

 

username은 계정의 고유한 값을 나타내며,

UserDetailsgetUsername() 함수는 인증하기 위해 사용된 사용자의 username을 리턴해야한다. nullreturn 하면 안된다.

이 값을 통해 시큐리티가 로그인 처리를 할 수 있는데 이 값을 null로 리턴을 해버리니 로그인 처리에서 principalName cannot be empty 에러가 난 것이다.

 

 

Spring Security에 대해 많은 공부가 필요한 것 같다.