본문 바로가기
🛠 BackEnd/Spring

[ Spring ] - Spring Security 인증 절차 인터페이스 UserDetails, UserDetailsService

by 깸뽀 2022. 10. 9.
728x90

UserDetailsService 해당 인터페이스의 메소드에서 DB의 유저 정보를 가져와서 AuthenticationProvider 인터페이스로 유저 정보를 리턴하면, 그 곳에서 사용자가 입력한 정보와 DB에 있는 유저 정보를 비교한다. 해당 글은 유저 정보를 가져오는 인터페이스를 구현하는 것이기 때문에, 사용자가 입력한 정보와 비교하는 작없은 없다. DB에서 유저 종보를 가져오는 작업만 하기 때문에, 여기서 필요한 인터페이스는 UserDetails 인터페이스와 UserDetailsService 인터페이스다.

 

1. UserDetails

💡 사용자 정보를 담는 인터페이스

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

이 인터페이스를 구현하게 되면 Spring Security에서 구현한 클래스를 사용자 정보로 인식하고 인증 작업을 한다.

쉽게 말하면 UserDetails 인터페이스는 VO역할을 한다고 보면된다.

 

UserDetails 인터페이스를 구현하게 되면 오버라이드 되는 메소드 들이 있다. 이 메소드들에 대해 파악해야 한다.

그리고 회원 정보에 관한 다른 정보(이름, 나이, 생년월일...)도 추가해도 된다.

오버라이드 되는 메소드들만 Spring Security에서 알아서 이용하기 때문에 따로 클래스를 만들지 않고 멤버변수를 추가해서 같이 사용해도 무방하다. 만든 멤버변수들은 Getter, Setter를 만들어서 사용하면 된다.

  •  getUsername() : 계정의 아이디(혹은 이메일)을 리턴
  • 계정이 만료되었는지, 계정이 잠겨있는지 등등 이것들에 대해 체크할 필요가 없다면 true를 리턴해주면 된다
  • 만약 체크할 멤버변수가 존재한다면 그 멤버변수를 리턴해주면 된다.
  • DB에 계정의 (비)활성화를 확인하는 멤버변수가 존재하면 isEnabled() 메소드는 해당 멤버변수를 리턴해 줘도 된다

 

2. UserDetailsService

💡 DB에서 유저의 정보를 가져와서 리턴

UserDetailsService 해당 인터페이스의 메소드에서 DB의 유저 정보를 가져와서 AuthenticationProvider 인터페이스로 유저 정보를 리턴한다.

UserDetailsService  인터페이스에는 DB에서 유저 정보를 불러오는 중요한 메서드가 존재한다.

바로  loadUserByUsername() 메소드이다. 이 메서드에서 유저 정보를 불러오는 작업을 하면 된다.

UserDetailsService 인터페이스를 구현하면 loadUserByUsername() 메서드가 오버라이드 될 것이다.

 

 

< 참고 >

728x90

댓글