Principal 인터페이스와 User 클래스의 관계
안녕하세요. 강의를 듣던 중 해결되지 않는 의문이 생겨 질문드립니다.
강의에서 Principal 은 인터페이스이며 UserDetailsService에서 반환한 User 클래스가 구현체로 사용된다고 말씀해주셨는데 여기서 의문이 생겼습니다.
확인해보니 Principal은 User 클래스의 인터페이스가 아닌 Authentication 의 구현체로 사용되는 UsernamePasswordAuthenticationToken 의 최상위 인터페이스였습니다.
하지만 Authentication에서 User 객체를 받아오는 메서드의 이름도 getPrincipal() 입니다. 그렇다면, 위 그림에서 나타난 Principal 인터페이스와 User 객체를 반환하는 getPrincipal()의 principal은 서로 다른 의미로 쓰이는 건가요?
디버깅을 해봐도 아래와 같이 Principal 인터페이스를 구현하는 XxxAuthenticaionToken 객체가 Authentication 타입으로 받아지고 User 객체는 그냥 Object 타입으로 받아져서 혼동이 되어 질문드립니다.

回答 1
0
어.. 이 부분은 제가 잘못 설명드린거 같네요. Principal은 User의 인터페이스가 아니고 말씀하신 구조가 맞습니다.
Authentication에서 정의한 getPrincipal()에서의 Principal이 그려주신 Principal 인터페이스였다면, 굳이 Object 타입으로 리턴할 필요는 없었겠죠.
제가 설계한게 아니라서 확신은 없지만, 제 생각엔 getPrincipal()이 리턴하는 객체를 사용자가 직접 정의한 임의의 클래스 타입이라고 가정한 것 같습니다. 가령, User를 확장해서 만든 커스텀 타입이요. 그런 타입이 Principal이라는 인터페이스를 구현할 필요까지는 없고, 또 강제하고 싶지 않았을 것 같아요. (스프링은 비침투성을 추구하니까요.) 아마도 그래서 그런 혼란스런움 점이 생긴것 같습니다. 어디까지나 추측이지만요.
커스텀 로그인 페이지를 등록할 경우 LogoutFilter의 등록 여부 질문
0
383
1
anonymousClass를 사용하는 이유
0
387
1
ExcpetionTranslationFilter가 FilterSecurityInterceptor에서 발생하는 예외만 처리하는 이유
0
242
1
passwordEncoder 질문드립니다.
0
320
1
WebSecurityConfigurerAdapter is deprecated 가 불편하신 분들을 위해
6
864
1
왜 스프링은 userid가 아니고 username을 사용했을까요?
0
1022
1
무상태성
0
346
2
로그인 후 로그인 페이지 접속
0
282
1
AuthenticationException은 어떤 경우에 발생하는지
0
556
1
AccountService에 비밀번호
1
224
1
커스텀 어노테이션 의 `커스텀 value` 설정방법에 관한 질문입니다.
0
356
1
passwordEncoder 빈 생성 시 차이
0
252
1
Bean 등록 관련 질문입니다.
0
247
1
시큐리티 전략관련
0
354
3
브라우저 기반 요청이 클라이언트의 요청을 처리 -> 의 의미?
0
228
1
AccountControllerTest 실행오류
0
1066
1
알려주신대로 설정을 해도 다시 302요청을 보냅니다....
0
342
1
voter에 대해 질문이 있습니다.
0
225
1
제가 맞게 이해한것인지 궁금합니다.
1
233
1
Spring security test 수행시 @AuthenticationPrincipal 가 null 로 세팅됨
0
546
1
Spring security Multi 인증 문의드려요
0
287
1
ProviderManager 문의
0
267
1
UserDetailsService 가 DaoAuthenticationProvider 에 어떻게 주입 되는지 알 수 있을 까요?
0
326
1
Servlet Filter 질문이 있습니다.
0
287
1

