Spring - Security
전에 배운 HttpSession을 다뤄 로그인 로그아웃을 구현할 수 있지만
현업에서는 스프링을 사용하면 스프링 시큐리티를 사용하여 로그인, 로그아웃을 구현함
스프링 시큐리티는 필터 기반으로 동작하여 스프링 MVC와 분리되어 관리 및 동작한다.
Spring Security를 이용한 로그인 과정
1. 클라이언트(유저)가 로그인을 시도합니다.
2. AuthenticationFilter는 AuthenticationManager, AuthenticationProvider(s), UserDetailsService를 통해 DB에서 사용자 정보를 읽어옵니다. 여기서 중요한 것은 UserDetailsService가 인터페이스라는 것입니다. 해당 인터페이스를 구현한 빈(Bean)을 생성하면 스프링 시큐리티는 해당 빈을 사용하게 됩니다. 즉, 어떤 데이터베이스로 부터 읽어들일지 스프링 시큐리티를 이용하는 개발자가 결정할 수 있게 됩니다.
3. UserDetailsService는 로그인한 ID에 해당하는 정보를 DB에서 읽어들여 UserDetails를 구현한 객체로 반환합니다. 프로그래머는 UserDetails를 구현한 객체를 만들어야 할 필요가 있을 수 있습니다. UserDetails정보를 세션에 저장하게 됩니다.
4. 스프링 시큐리티는 인메모리 세션저장소인 SecurityContextHolder 에 UserDetails정보를 저장하게 됩니다.
5. 클라이언트(유저)에게 session ID(JSESSION ID)와 함께 응답을 하게 됩니다.
6. 이후 요청에서는 요청 쿠키에서 JSESSION ID정보를 통해 이미 로그인 정보가 저장되어 있는 지 확인합니다. 이미 저장되어 있고 유효하면 인증 처리를 해주게 됩니다.
코드의 양이 상당하여 부스트 코스 링크만 남겨 놓을게요
www.boostcourse.org/web326/lecture/58997?isDesc=false
웹 백엔드
부스트코스 무료 강의
www.boostcourse.org