Spring Security에서 사용자의 정보를 불러오기 위해서 구현해야 하는 인터페이스로 기본 오버라이드 메서드들은 아래와 같다.
대부분의 경우 Spring Security의 기본 UserDetails로는 실무에서 필요한 정보를 모두 담을 수 없기에 CustomUserDetails와 같이 새로운 클래스를 구현하여 사용한다.
Spring Security에서 유저의 정보를 가져오는 인터페이스이다.
자세한 내용
- 사용자가 로그인을 할 때 기본 회원인지 인증하고, 인증이 완료되면 로그인한 상태의 사용자의 세션을 유지시켜주기 위한 인터페이스이다.
- 기본적으로 해당 인터페이스를 상속받으면 loadUserByUsername 메서드를 구현해야 한다.
- loadUserByUsername 메서드는 현재 시큐리티를 통해서 로그인한 회원이 기본 회원인지 아닌지 인증하는 메서드이다. 파라미터로 넘어온 username은 html form에서는 id 값에 해당하는 정보이고, JSON 데이터에서는 username에 해당하는 value 값이 넘어온다.
- 인증에 성공하면 해당 회원에 대한 세션정보가 생성되고 Authentication 객체나 @AuthenticationPrincipal 애노테이션을 통해서 세션에 들어있는 사용자 정보를 꺼내와 사용할 수 있다. 즉, 이 메서드가 정상적으로 완료되어 UserDetails 정보가 반환되면 인증에 성공한 것이다.
Spring Security에서 유저의 정보를 불러오기 위해서 구현해야하는 인터페이스로 기본 오버라이드 메서드는 아래와 같다.
구현한 PrincipalDetailsService는 시큐리티 설정정보 클래스에 등록해야 정상적으로 사용할 수 있다
SecurityContextHolder에서 UserDetails 불러오기
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserDetails userDetails = (UserDetails)principal;
String username = userDetails.getUsername();
String password = userDetails.getPassword();
기본적으로 Spring Security의 principal 객체는 Object 형태로 UserDetails를 형변환 해야 한다.