inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 시큐리티 완전 정복 [6.x 개정판]

SecurityContextRepository / SecurityContextHolderFilter - 2

anonymousAuthenticationFilter 와 AuthorizationFilter 의 로직 순서

121

노동준

작성한 질문수 24

0

SecurityFilterChain 의 순서를 보면 AnonymousAuthenticationFilter 가 먼저이고 AuthorizationFilter 가 맨 마지막에 실행되는 것을 확인했습니다.

Anonymous 강의에서 AnonymousAuthenticaionFilter는 authentication이 null 인 경우 AnonymousAuthenticaionToken을 생성하여 익명 사용자로 처리한고 Authentication이 null이 아닌 경우 doFilter()로 다음필터로 넘어간다고 하셨는데.

오늘 강의를 보니 anonymousAuthenticationFilter 에는 authenticaion 이 있는지 확인을 하지 않고 authorizationFilter 에서 getContext().getAuthentication() 을 통해 유무를 확인후 없다면 다시 AnonymousAuthenticationFilter 를 통해 AnonymousAuthenticationToken을 생성시켜 할당하는 것 처럼 보이는데 맞을까요?

즉 anonymousAuthenticationFilter doFilter() --> AuthorizationFilter getAuthentication() --> anonymousAuthenticationFilter에서 생성

spring spring-boot spring-security security web-security

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

노동준님께서 질문하신 내용은 스프링 시큐리티의 필터 체인에서의 동작과 관련된 것으로 보입니다. 질문에서 말씀하신 두 필터, AnonymousAuthenticationFilterAuthorizationFilter 는 서로 다른 역할을 담당하고 있습니다.

  1. AnonymousAuthenticationFilter: 이 필터는 SecurityContext 내에 Authentication 객체가 없는 경우에 작동합니다. 즉, 인증되지 않은 사용자의 요청이 들어왔을 때, 스프링 시큐리티는 이를 익명 사용자로 처리하기 위해 AnonymousAuthenticationToken 객체를 생성하여 SecurityContext에 저장합니다.

  2. AuthorizationFilter: 이 필터는 요청이 인증되었는지 확인하고, 해당 사용자에 대해 적절한 권한이 있는지를 판단합니다. SecurityContext 에 이미 Authentication 객체가 있는지를 확인하고, 해당 객체에 따라 요청의 권한을 검증합니다.

흐름 설명:
- 기본적으로 AnonymousAuthenticationFilter 는 인증이 없을 경우에만 AnonymousAuthenticationToken 을 생성합니다.
- AuthorizationFilter 는 요청이 들어오면 SecurityContextAuthentication 객체가 있는지 검사하고, 없다면 권한 검증을 진행하지 않으며 익명의 권한을 설정된 필터에 따라 처리합니다.

질문에서 언급하신 바와 같이 AnonymousAuthenticationFilter 에서 Authentication 객체의 존재 여부를 확인하지 않고 AuthorizationFilter 에서 다시 확인하는 것은 일반적이지 않습니다. AnonymousAuthenticationFilter 는 필터 체인에서 이미 Authentication 이 null 인 경우를 처리하게 되어 있어, 이후 필터에서는 이를 수용하여 진행합니다.

추가적으로 이해를 돕기 위해 연관 있는 토론 링크들을 확인해보세요:
- Anonymous Authentication 관련 String Security 필터 동작 질문
- Filter Chain 순서 관련 기존 커뮤니티 토론

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

로그아웃-logout()-2 강에서 겟방식 로그아웃 호출 후 화면이동 질문입니다.

0

33

2

단원별 소스코드

0

62

2

CustomAuthenticationProvider 추가 관련 문의

0

77

2

AOP 의존성 명칭 변경

0

71

1

빈 1개 등록 시 다른 해결 방법

0

70

1

@Bean으로 AuthenticationProvider를 등록 시 http.authenticationProvider 함수를 이용해서 추가해줘야되나요?

0

87

2

OIDC의 id token에 담긴 데이터에 대해

0

78

1

loginPage("/loginPage") 질문드립니다.

0

69

1

@EnableWebSecurity

0

148

1

트랜잭션과 롤백

0

99

1

68. 인증 이벤트 - AuthenticationEventPublisher 활용 강좌 음성 문제

0

91

2

AuthenticationManager 사용 방법

0

152

2

HttpSecurity.authorizeHttpRequests() - 2 강의 부분에 대한 질문

0

108

2

spring security 6.3에서는 HttpSecurity가 만들어지기 전 WebSecurity가 먼저 만들어지는게 맞나요??

0

191

1

init(B Builder), configure(B builder) 에 대하여 질문 드립니다.

0

109

2

메타 주석 질문

0

69

1

동시세션제어 기능에서 로그아웃하기

0

150

3

로그인 후, redirect 에서 error

0

139

3

Session 생성 타이밍에 대한 질문

0

86

2

강의 참고 내용을 개발 로그로 작성해도 될지 문의드립니다.

0

135

2

customAuthentication 관련

0

131

2

authenticationManagerBuilder 주입받은거 vs 만든 거

0

114

1

UserDetailsService()에서 UserDetail이 아닌 타입을 반환할 수 있나요?

0

101

1

9:28 패턴 3의 경우 마지막으로 설정한 것만 적용되는 것 같습니다.

0

162

2