현재 버전

Spring Security에서 세션을 무상태(STATELESS)로 설정하신다면,

사용자가 인증과정을 통해 생성된 Authentication객체가 저장되지 않습니다.

무슨 뜻인지 간략하게 설명드리겠습니다.



  1. Spring Security를 통해 인증과정을 거친 유저의 Authentication이 생성됨
  2. Authentication은 SecurityContext의 Authentication에 저장됨
  3. SecurityContext는 Security의 필터가 끝나고 HttpSessionSecurityContextRepository라는 저장소에 인증정보를 저장함
  4. SecurityContext는 유지되지 않고 폐기된다.
  5. 다음 요청이 들어오면 Security Context를 다시 생성하고, 이전에 검증한 Authentication이 있는지 HttpSessionSecurityContextRepository에서 찾는다.
  6. 찾게 되면 Authentication을 SecurityContext에 setAuthentication을 호출하여 저장한다.


완전 간단하게 세부 기능을 제외하고 말씀드렸습니다.
이 때 개발자가 SESSION을 STATLESS(무상태)로 지정하면 위 설명중 3번의 내용이 수행되지 않습니다.

3번의 내용을 보면 HttpSessionSecurityContextRepository라는 곳에 저장을 한다는 것인데,

위 내용은 SecurityContext정보를 HttpSession에 저장하는 것입니다.

그런데 개발자가 SESSION을 STATLESS로 지정하면 3번 과정의 HttpSession을 사용하지 않기 때문에,

해당 과정에서 인증된 Context가 저장되지 않는 것이고, 6번 과정에서 저장되지 않았기에 이전 정보를

찾지 못해 Authentication이 null로 나오는 것입니다.



수정 이력

2021-07-30 16:01:40 에 아래 내용에서 변경 됨 #2

Spring Security에서 세션을 무상태(STATELESS)로 설정하신다면,

사용자가 인증과정을 통해 생성된 Authentication객체가 저장되지 않습니다.

무슨 뜻인지 간략하게 설명드리겠습니다.



  1. Spring Security를 통해 인증과정을 거친 유저의 Authentication이 생성됨
  2. Authentication은 SecurityContext의 Authentication에 저장됨
  3. SecurityContext는 Security의 필터가 끝나고 HttpSessionSecurityContextRepository라는 저장소에 인증정보로 저장됨
  4. SecurityContext는 유지되지 않고 폐기된다.
  5. 다음 요청이 들어오면 Security Context를 다시 생성하고, 이전에 검증한 Authentication이 있는지 HttpSessionSecurityContextRepository에서 찾는다.
  6. 찾게 되면 Authentication을 SecurityContext에 setAuthentication을 호출하여 저장한다.


완전 간단하게 세부 기능을 제외하고 말씀드렸습니다.
이 때 개발자가 SESSION을 STATLESS(무상태)로 지정하면 위 설명중 3번의 내용이 수행되지 않습니다.

3번의 내용을 보면 HttpSessionSecurityContextRepository라는 곳에 저장을 한다는 것인데,

위 내용은 SecurityContext정보를 HttpSession에 저장하는 것입니다.

그런데 개발자가 SESSION을 STATLESS로 지정하면 3번 과정의 HttpSession을 사용하지 않기 때문에,

해당 과정에서 인증된 Context가 저장되지 않는 것이고, 6번 과정에서 저장되지 않았기에 이전 정보를

찾지 못해 Authentication이 null로 나오는 것입니다.


2021-07-30 16:01:23 에 아래 내용에서 변경 됨 #1

Spring Security에서 세션을 무상태(STATELESS)로 설정하신다면,

사용자가 인증과정을 통해 생성된 Authentication객체가 저장되지 않습니다.

무슨 뜻인지 간략하게 설명드리겠습니다.



  1. Spring Security를 통해 인증과정을 거친 유저의 Authentication이 생성됨
  2. Authentication은 SecurityContext의 Authentication에 저장됨
  3. SecurityContext는 Security의 필터가 끝나기 이전에 HttpSessionSecurityContextRepository라는 저장소에 인증정보로 저장됨
  4. SecurityContext는 유지되지 않고 폐기된다.
  5. 다음 요청이 들어오면 Security Context를 다시 생성하고, 이전에 검증한 Authentication이 있는지 HttpSessionSecurityContextRepository에서 찾는다.
  6. 찾게 되면 Authentication을 SecurityContext에 setAuthentication을 호출하여 저장한다.


완전 간단하게 세부 기능을 제외하고 말씀드렸습니다.
이 때 개발자가 SESSION을 STATLESS(무상태)로 지정하면 위 설명중 3번의 내용이 수행되지 않습니다.

3번의 내용을 보면 HttpSessionSecurityContextRepository라는 곳에 저장을 한다는 것인데,

위 내용은 SecurityContext정보를 HttpSession에 저장하는 것입니다.

그런데 개발자가 SESSION을 STATLESS로 지정하면 3번 과정의 HttpSession을 사용하지 않기 때문에,

해당 과정에서 인증된 Context가 저장되지 않는 것이고, 6번 과정에서 저장되지 않았기에 이전 정보를

찾지 못해 Authentication이 null로 나오는 것입니다.