[Spring Security] 구조

Geeho.a·2020년 12월 2일
0
  • filter 기반으로 동작을 한다.

[ 전체 구조 ]

  • 흐름정리
  1. 사용자가 입력한 form을 통해 로그인 정보가 담긴 Request를 보낸다.
  2. AuthenticationFilter가 HttpServletRequest에서 사용자가 보낸 아이디와 패스워드를 인터셉트 한다.
  3. 꺼내온 로그인 정보를 AuthenticationManager(인터페이스) 에게 UsernamePasswordAuthenticationToken(인증용객체)로 만들어서 준다.
  4. 실제 인증을 할 AuthenticationProvider에게 UsernamePasswordAuthenticationToken를 다시 전달한다.
  5. 인증 절차가 시작되면 AuthenticationProvider 인터페이스가 실행되고 DB에 있는 이용자의 정보와 화면에서 입력한 로그인 정보를 비교한다.
  6. AuthenticationProvider(인터페이스) 에서는 authenticate() 메소드를 오버라이딩 하는데 이 메소드의 파라미터인 Authentication으로 화면에서 입력한 로그인 정보를 가져올 수 있다.
  7. AuthenticationProvider에서 DB에 있는 이용자의 정보를 가져오려면 UserDetailsService(인터페이스)를 사용한다.
  8. UserDetailsService는 화면에서 입력한 이용자의 이름(username)을 가지고 loadUserByUsername()메소드를 호출하여 DB에 있는 이용자의 정보를 UserDetails 로 가져온다. 이용자가 존재하지 않으면 예외를 던짐
  9. DB에서 가져온 이용자의 정보와 화면에서 입력한 로그인 정보를 비교하고
    일치하면 Authentication 참조를 리턴, 일치하지 않으면 예외를 던짐
  10. 인증이 완료되면 사용자 정보를 가진 Authentication객체를 SecurityContextHolder에 담은 이후 AuthenticationSuccessHandle를 실행시킨다. 실패시 AuthenticationFailureHandler실행함
  • Authentication : 현재 접근 주체 정보를 담는 역할, 인증 요청을 할 때 요청 정보를 담는 역할이다.

0개의 댓글

관련 채용 정보