이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다.
인증 API - AnonymousAuthenticationFilter
익명 사용자 인증 처리 필터
- 익명 사용자와 인증 사용자를 구분해서 처리하기 위한 용도로 사용된다.
- 화면에서 인증 여부를 구현할 때 isAnonymous() 와 isAuthenticated() 로 구분해서 사용된다.
- 예를 들어
- isAnonymous() 인 경우 로그인 익명 사용자이므로 메뉴에 로그인을 추가할 수 있다.
- isAuthenticated() 인 경우 인증 사용자이므로 메뉴에 로그아웃을 추가할 수 있다.
- 예를 들어
- 인증 객체를 세션에 저장하지 않는다.
- AnonymousAuthenticationFilter가 사용자 요청을 받는다.
- SecutityContext 내부에 인증 객체가 존재하는지 판단한다.
- 존재하면 다른 필터로 이동한다.
- 존재하지 않으면 익명 사용자용 인증 객체를 생성한다. (Anonymous Authentication Token)
- SeucurityContextHolder > SecurityContext 내부에 해당 객체를 저장한다.
실습
- 인증을 받지 않은 사용자가 루트(/) 페이지로 이동하면 AnonymousAuthenticationFilter 클래스의 다음 메소드가 호출된다.
- SecurityContext 내부에 Authentication 객체가 존재하는지 여부를 파악한다.
- 존재하지 않는다면 새로운 인증 객체를 생성해 SecurityContext 내부에 담는다.
- SecurityContext 내부에 Authentication 객체가 존재하는지 여부를 파악한다.
- 이때 생성하는 인증 객체는 익명 사용자용 인증 객체 (AnonymousAuthenticationToken)이다.
- 사용자 정보와, 권한 정보를 담아 생성한다.
- AbstractSecurityIntercetor 클래스는 보안 필터 중 마지막에 위치하는 필터이다.
- 다음과 같이 SecurityContext 내부에 인증 객체가 존재하는지 확인한다.
- 존재하지 않는다면 예외를 발생시킨다.
- 이러한 이유로 익명 사용자용 인증 객체를 생성하는 것이다.
- 다음과 같이 SecurityContext 내부에 인증 객체가 존재하는지 확인한다.
- 이후 익명 사용자인지 인증 사용자인지 구분해서 처리한다.
'스프링 시큐리티 > 스프링 시큐리티 기본 API 및 Filter 이해' 카테고리의 다른 글
세션 제어 필터: SessionManagementFilter, ConcurrentSessionFilter (0) | 2023.01.11 |
---|---|
동시 세션 제어, 세션 고정 보호, 세션 정책 (0) | 2023.01.11 |
Remember Me 인증 필터: RememberMeAuthenticationFilter (0) | 2023.01.10 |
Remember Me 인증 (0) | 2023.01.10 |
Logout 처리, LogoutFilter (1) | 2023.01.10 |