작성
·
274
0
강의시간 11:26
위 상황은 jsession 쿠키를 제거한 상태에서 remember-me쿠키만 지닌채 서버로 요청한 상황입니다.
jsession이 없기 때문에
securityContextHolder
에서 getContext() 로 찾을 수 있는 securityContext객체가 없기 때문에 getContext( )의 결과는 null 이지 않을까...?
위의 물음에 잘못된 점이 있는지 궁금합니다.
답변 2
0
7) RememberMe인증필터: RememberMeAuthentication
강의시간 11:26의 소스코드는 아래와 같습니다.
if (SecurityContextHolder.getContext().getAuthentication() != null)
위 코드를 디버깅의 evaluate (watch)를 통해 null 인 것을 확인했습니다.
하지만,
강의에서와 같이 브라우저에서 세션을 제거하고 요청을 보내는 상황에서 securityContextHolder.getContext()
가 null
이 되고 .geAuthentication()
을 호출하는 순간에 nullPointerException 이 발생 할 것이라 예상했지만 예상과 달리
SecurityContextHolder.getContext()
값은 SecurityContextImpl@6538
로 securityContext객체가 보여졌습니다.
이와 관련된 답변은 아래 링크를 통해 받았지만
https://www.inflearn.com/questions/666102
현재 상황은 예외적인 현상처럼 느껴지고 있습니다.
0
네 맞습니다.
RememberMe 인증은 세션이 무효화 되어서 SecurityContext 안에 Authentication 객체가 없는 상태에서도 remember-me 쿠키가 요청 헤더로 서버에 전달된 경우에 자동적으로 인증을 시도해서 인증상태를 계속 유지하기 위한 것이 목적이라 할 수 있습니다.
그래서 질문하신 것처럼 jsession 쿠키를 제거한 상태에서 remember-me쿠키만 지닌채 서버로 요청한 상황은 세션에서 SecurityContext 을 참조할 수 없는 상태가 맞습니다.
찾았습니다! securityContextPersistence 필터 강의를 후속으로 들으니
SecurityContextHolder.setContext(contextBeforeChainExecution);
로직 덕분에 새 sc가 생성된 것을 확인할 수 있었습니다.감사합니다!