작성
·
213
·
수정됨
0
실습환경
스프링부트 3.2.2 기준 security 6.2.1
질문
안녕하세요.
빠르게 두 번째 듣고 있습니다ㅋㅋㅋ
첫 번째에는 강의 환경과 맞춰서 들었는데 아무래도 관련 지식이 부족한 채로 듣다 보니까, oauth2 한참 듣고 와서 인증인가 쪽 코드를 슥 보니 전혀 모르겠어서 다시 듣고 있어요ㅋㅋ
질문은 다름이 아니라 지금은 최신 버전으로 듣고 있는데요. 처음에는 버전 차이인 줄 알았더니 아닌 것 같아서요. 익명사용자 인증필터 강의 PPT에서 "세션에 저장하지 않는다"라고 하셨는데 코드 따라가보니까 익명 객체도 세션 저장을 하더라고요. 생각해보면 로그인을 안 해도 브라우저에 session id를 내려주니까 서버에서 session을 유지하고 있어야 할 것 같긴 한데요..
ExceptionTranslationFilter에서 sendStartAuthentication에서 엔트리포인트의 commence 함수를 바로 위에, this.requestCache.saveRequest(request, response)를 쭉 타고 가보면 Request.doGetSession()에서 session을 만들고 반환하는 부분이 있습니다.
로그인 인증 이후에는 session id만 변경하는 로직이 있는 것도 익명 인증 때 이미 session이 존재한다는 걸 뒷받침하는 것 같습니다. 제가 틀린 부분이 있으면 가르침 부탁드립니다.
답변 1
1
강의에서 설명하는 부분은 익명사용자 객체가 담겨져 있는 SecurityContext 가 세션에 저장되지 않는다는 의미입니다.
당연히 세션쿠키는 생성됩니다. 그건 클라이언트와 서버와의 통신이 이루어지면 발생하는 현상이지 스프링 시큐리티에서 SecurityContext 를 세션에 저장한다는 개념과는 상관이 없습니다.
요약하자면 익명사용자의 AnonymousAuthenticationToken 을 담은 SecurityContext 객체는 HttpSession 에는 저장되지 않습니다. 정확하게는 저장할 필요가 없습니다.
앗 맞네요. 세션에 저장한다와 세션을 저장한다가 완전 다른 말인데 질문을 쓰기 전까지 제대로 인지 못했습니다. 설명 감사합니다!