인프런 커뮤니티 질문&답변

민경재님의 프로필 이미지

작성한 질문수

스프링 시큐리티

8) 익명사용자 인증 필터 : AnonymousAuthenticationFilter

밑에 있는 익명사용자 여부

작성

·

288

3

안녕하세요.

저도 또한 익명사용자를 왜사용하는지 몰라서 밑에 있는 질문과 선생님의 댓글을 보았는데요. 그래도 이해가 가질않습니다.

언어의 장난처럼 느껴지는 부분이 있어요.

인증이 되었지만 로그인을 안한 사용자.

세션이 만료된 사용자.

인증을 안한 사용자.

구분이 잘안갑니다. 감사합니다.

답변 1

13

정수원님의 프로필 이미지
정수원
지식공유자

스프링 시큐리티 설계자가 왜 익명사용자라는 개념을 도입했는지 생각해보면 될 것 같습니다.

인증을 하지 않은 사용자를 단지 user 객체가 null 이라는 단순한 개념이 아닌 AnonymouAuthenticationToken 객체에  익명사용자의 정보를 저장하고(사용자명, 권한, 인증여부 등..) 이를 SecuirtyContext 객체에 저장하여 어플리케이션 전역적으로 사용할 수있도록 도입했을 뿐입니다.

즉, 익명사용자일 경우

String user = SecurityContextHolder.getContext().getAuthentication() 하면 user 에 "anonymousUser" 가 저장되고 이 user 변수는 principal 에 저장이 되며 principal 은 AnonymousAuthenticationToken 저장이 되고 최종적으로 AnonymusAuthenticationToken 은 SecurityContext 에 저장이 되는 계층적 구조로 되어 있습니다.

이건 인증사용자도 마찬가지 구조입니다.

이러한 전반적인 처리를 하는 필터가 AnonymousAuthenticationFilter 이구요

어떻게 보면 객체지향적인 설계사상에 근거하여 익명사용자도 인증사용자처럼 일관성, 통일성 있게 스프링 시큐리티의 인증 프로세스를 따르도록 구현한 것일 수도 있습니다.

굳이 스프링 시큐리티가 아니라도 만약 어떤 시스템에서 인증을 하지 않는 사용자를 어떤 특정한 클래스를 만들어 거기에 보관하여 관리하도록 설계를 하고 구현 한다면 위와 비슷한 개념이 됩니다.

너무 어렵게 접근하실 필요는 없습니다

일반적으로 우리가 아는 로그인 하지 않은 사용자의 개념을 조금 더 구조적으로  설계하고 필터개념을 도입해서 관리하고자 함이라고 이해하시면 됩니다.