컨트롤러에서 그냥 Authentication을 파라미터로 받아요면 null인 이유
284
작성한 질문수 1
컨트롤러가 실행되는 시점이면 이미 모든 Filter를 거쳤으니 AnonymousAuthenticationFilter도 거쳤을거라 생각하고, SecurityContext에도 AnonymousAthenticationToken이 있으니,
Authentication에 AnonymousAthenticationToken이 있을거라 생각했는데, 왜 null이 있는건가요??
그리고 왜 @CurrentSecurityContext로 찾을때만 AnonymousAthenticationToken를 받을수 있는건가요??
답변 2
0
네 강의에서 설명하는 내용 그대로입니다.
그 이유는 익명 사용자인 경우 스프링 MVC 에서 굳이 객체를 참조해 줄 필요가 없다고 판단한 것 같습니다.
대신 SecurityContext 객체는 유효하므로 객체로 참조할 수 있고 그렇게 되면 SecurityContext 안에는 익명사용자 객체가 존재할 것이므로 그렇게 접근하라고 하는 것 같습니다.
0
안녕하세요, 인프런 AI 인턴입니다.
님의 질문은 스프링 시큐리티의 작동 방식과 관련된 것으로 보입니다. 스프링 시큐리티는 요청이 처리되는 동안 다양한 필터를 통해 인증 정보를 SecurityContext에 저장합니다. 컨트롤러에서 Authentication 객체를 파라미터로 직접 받으려고 할 때 null이 발생하는 이유는 스프링이 자동으로 해당 객체를 메소드 파라미터로 주입해주는 기능이 기본적으로 활성화되어 있지 않기 때문일 수 있습니다.
스프링 시큐리티에서는 @AuthenticationPrincipal이나 @CurrentSecurityContext 어노테이션을 사용하여 현재 인증된 사용자의 상세 정보나 SecurityContext를 메소드 파라미터로 받을 수 있도록 지원합니다. 특히, @CurrentSecurityContext를 사용하면 SecurityContext에서 직접 Authentication 객체를 추출할 수 있으며, 이 경우에는 해당 컨텍스트에 저장된 AnonymousAuthenticationToken을 포함하여 현재 인증 정보를 가져올 수 있습니다.
이 정보만으로는 구체적인 코드 상황과 스프링 시큐리티의 설정을 모두 파악하기는 어렵습니다만, 일반적으로 컨트롤러에서 Authentication 객체를 직접 받으려 할 때 null이 반환되는 문제는 스프링 시큐리티의 인증 프로세스와 스프링의 파라미터 주입 방식 사이의 연동에 주의를 기울여야 해결할 수 있습니다. @CurrentSecurityContext를 통해 Authentication 객체를 받을 때 정상적으로 작동하는 것은 이 어노테이션이 SecurityContext로부터 직접 정보를 가져오도록 구성되어 있기 때문입니다.
더 자세한 내용은 스프링 시큐리티 공식 문서 or 관련 참고 자료를 확인하시는 것을 추천드립니다.
로그아웃-logout()-2 강에서 겟방식 로그아웃 호출 후 화면이동 질문입니다.
0
35
2
단원별 소스코드
0
65
2
CustomAuthenticationProvider 추가 관련 문의
0
78
2
AOP 의존성 명칭 변경
0
77
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
100
1
68. 인증 이벤트 - AuthenticationEventPublisher 활용 강좌 음성 문제
0
91
2
AuthenticationManager 사용 방법
0
153
2
HttpSecurity.authorizeHttpRequests() - 2 강의 부분에 대한 질문
0
108
2
spring security 6.3에서는 HttpSecurity가 만들어지기 전 WebSecurity가 먼저 만들어지는게 맞나요??
0
192
1
init(B Builder), configure(B builder) 에 대하여 질문 드립니다.
0
109
2
메타 주석 질문
0
69
1
동시세션제어 기능에서 로그아웃하기
0
152
3
로그인 후, redirect 에서 error
0
140
3
Session 생성 타이밍에 대한 질문
0
86
2
강의 참고 내용을 개발 로그로 작성해도 될지 문의드립니다.
0
135
2
customAuthentication 관련
0
132
2
authenticationManagerBuilder 주입받은거 vs 만든 거
0
114
1
UserDetailsService()에서 UserDetail이 아닌 타입을 반환할 수 있나요?
0
101
1
9:28 패턴 3의 경우 마지막으로 설정한 것만 적용되는 것 같습니다.
0
162
2





