4. 로그인 구현 with Spring Security

지난 글에서는 Spring Security의 흐름을 이해하기 위해 각 인터페이스를 알아보았다. 이번 글에서는 코드를 기능 단위(회원 가입/로그인/권한 처리)로 정리해보았다.

회원 가입

회원가입은 단순 저장이기에, 로그인 인증처럼 시큐리티 필터를 사용하지 않는다. 단, 도메인단만 시큐리티에서 사용하는 UserDetails를 상속받아 구현하였다. 이 프로젝트에서는 User, Admin 두 가지 권한 중 하나를 선택해서 가입할 수 있다. 비밀번호는 BCryptPasswordEncoder을 통해 암호화되어 저장된다.

Join

도메인단 : User, UserRole

도메인단은 UserDetails를 상속받아 구현하였다.

  • 서비스단 : UserService

회원가입 로직은 단순 저장하는 역할이다. 즉, 서비스단에서 시큐리티를 사용할 필요가 없다. 따로 UserDetailsService 를 상속받아 구현하지 않았다.

  • 레포지토리단 : UserRepository

회원가입 로직에서는 레포지토리단 또한 단순 저장하는 역할이다. 이 또한 시큐리티를 따로 사용하지 않았다.

  • 컨트롤러단 : UserController

/join은 컨트롤러에만 있고 따로 SpringSecurityConfig에 등록하지 않았다.

로그인/로그아웃

스프링 시큐리티는 필터체인이라고 할 수 있다. Config 파일을 통해서 해당 어플리케이션의 모든 요청을 낚아채서 먼저 로그인하게 만들었다. 실패 시 / 성공 시 각자 계정 권한마다 화면이 다르다.

Login
  • SpringSecurityConfig :

필터 체인(SpringSecurityFilterChain)에 등록, 페이지 별 접근 권한 설정, 로그인 / 로그아웃 url 매핑 등의 설정을 해주었다. Manager에 Provider 등록해주었다.

  • HomeController

  • CustomAuthenticationProvider : AuthenticationProvider을 상속받아 구현

authenticate()을 통해 입력받은 Authentication와 DB의 User의 아이디/비번이 같은지 검증한다.

  • CustomUserDetailsService : UserDetailsService 을 상속받아 구현

loadUserByUsername()을 통해 DB의 User을 가져온다,

도메인단은 회원가입에 정리해놓았으므로 생략하였다.

전체 스프링 시큐리티 로그인 구현 코드는 다음 깃허브 브랜치에 있다❕

Last updated