스프링 시큐리티 흐름

Jang990·2023년 2월 2일
0

22년 09월 04일 작성글

UsernamePasswordAuthenticationFilter

//메타코딩 시큐리티 강의 코드
UsernamePasswordAuthenticationToken authenticationToken = 
    new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword());
  1. UsernamePasswordAuthenticationFilter에서 Id + Password를 담은 인증 객체(Authentication)를 생성

//메타코딩 시큐리티 강의 코드
Authentication authentication = 
    authenticationManager.authenticate(authenticationToken);
  1. AuthenticationManager에게 인증객체를 넘기며 인증 처리를 위임한다.

  2. 인증 관리자(AuthenticationManager)는 적절한 Provider(AuthenticationProvider)에게 인증 처리를 위임

AuthenticationManager - 인증 관리자 : 인터페이스이다.
ProviderManager : AuthenticationManager - 인증 관리자의 구현체이다.

인증 관리자(AuthenticationManager)는 필터로부터 인증 처리를 지시 받으면 가지고 있는
인증 처리자(AuthenticationProvider)들 중에서 현재 인증처리를 할 수 있는 Provider에게 인증 처리를 위임하여
인증 처리 수행 후 인증이 성공한다면 반환받은 인증 객체를 필터로 전달한다.


  1. 해당 Provider는 input 정보(id, password)를 가지고 실제 인증 처리 역할을 한다.

AuthenticationProvider는 인터페이스이다. 다음 두 개의 메서드를 제공한다.

authenticate(authentication) : 실제적인 인증 처리를 위한 검증 메서드

supports(authentication) : 인증처리가 가능한 Provider 인지 검사하는 메서드

두 개의 메서드는 사용자가 입력한 아이디와 패스워드가 들어간 authentication 객체를 가지고 로직을 수행한다.


  1. 인증 관리자(AuthenticationManager)는 이제 Password 검증

  2. SecurityContext에 저장

//객체 반환 - Authentication 객체가 session영역에 저장된다.
return authentication; 
  1. 이후 전역적으로 SecurityContextHolder에서 인증 객체를 사용 가능하게 한다.

참고한 글: songs4805블로그 시큐리티 아키텍쳐



UsernamePasswordAuthenticationFilter는 기본적으로 doFilter를 하지 않는 이유

UsernamePasswordAuthenticationFilter에서 인증 성공/실패 여부에 따라 successfulAuthentication, unsuccessfulAuthentication 메소드가 호출된다.

인증이 성공적으로 완료되었을 경우에 SecurityContextHolder에 저장하고, successHandler를 호출한다고 되어있다.

successHandler에서는 지정된 경로로 redirect하기때문에 doFilter를 할 필요가 없다고 되어있다.

설명이 부족해서 레퍼런스 글을 읽으려 했으나 삭제되어있어서 못봤다.
다른 글을 찾아보려했는데 dofilter에 관한 내용이 없어서 아직 정확히는 모르겠다.

https://iseunghan.tistory.com/368#UsernamePasswordAuthenticationFilter%EB%8A%94%20%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9C%BC%EB%A1%9C%20doFilter%EB%A5%BC%20%ED%98%B8%EC%B6%9C%20%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4.

profile
공부한 내용을 적지 말고 이해한 내용을 설명하자

0개의 댓글