// 변경된 보안 컨텍스트를 저장합니다. 주로 사용자가 인증되면 새로운 보안 컨텍스트를 저장하는 데 사용됩니다. voidsaveContext(SecurityContext context, HttpServletRequest request, HttpServletResponse response);
// 현재 요청에서 보안 컨텍스트가 존재하는지 확인합니다. booleancontainsContext(HttpServletRequest request); }
Session 에 저장 - HttpSessionSecurityContextRepository
HttpSessionSecurityContextRepository 는 Session 에 SecurityContext 정보를 저장합니다.
여러개의 Request 객체에 저장 - DelegatingSecurityContextRepository
여러개의 SecurityContextRepository 를 사용하기 위해 Spring Security 에서는 DelegatingSecurityContextRepository 를 제공합니다. 다음과 같이 여러개의 SecurityContextRepository 객체를 인자로 해 DelegatingSecurityContextRepository 객체를 생성할 수 있습니다.
@Bean public SecurityContextRepository securityContextRepository() { returnnewDelegatingSecurityContextRepository( newRequestAttributeSecurityContextRepository(), newHttpSessionSecurityContextRepository() ); }
DelegatingSecurityContextRepository 또한 같은 SecurityContextRepository 인터페이스를 통해 생성된 구현체라 사용하는 방식의 차이는 없습니다. 다만, 내부적으로 여러개의 SecurityContextRepository 를 한번씩 실행시키는 방식으로 로직을 수행합니다.
@Override public SecurityContext loadContext(HttpRequestResponseHolder requestResponseHolder) { SecurityContextresult=null; for (SecurityContextRepository delegate : this.delegates) { SecurityContextdelegateResult= delegate.loadContext(requestResponseHolder); if (result == null || delegate.containsContext(requestResponseHolder.getRequest())) { result = delegateResult; } } return result; }