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

창신동 장첸님의 프로필 이미지
창신동 장첸

작성한 질문수

스프링 시큐리티

7) Remember Me 인증 필터 : RememberMeAuthenticationFilter

세션쿠키를 제거한 상태에서 securityContext찾기

작성

·

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

현재 상황은 예외적인 현상처럼 느껴지고 있습니다.

찾았습니다! securityContextPersistence 필터 강의를 후속으로 들으니 SecurityContextHolder.setContext(contextBeforeChainExecution); 로직 덕분에 새 sc가 생성된 것을 확인할 수 있었습니다.

감사합니다!

0

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

네 맞습니다.

RememberMe 인증은 세션이 무효화 되어서 SecurityContext 안에 Authentication 객체가 없는 상태에서도 remember-me 쿠키가 요청 헤더로 서버에 전달된 경우에 자동적으로 인증을 시도해서 인증상태를 계속 유지하기 위한 것이 목적이라 할 수 있습니다.

그래서 질문하신 것처럼 jsession 쿠키를 제거한 상태에서 remember-me쿠키만 지닌채 서버로 요청한 상황은 세션에서 SecurityContext 을 참조할 수 없는 상태가 맞습니다.

창신동 장첸님의 프로필 이미지
창신동 장첸

작성한 질문수

질문하기