@)See Also
Spring Session
Spring Session 은
- 사용자의 세션 정보를 관리하기 위한 api 와 implementation 을 제공합니다.
- Clustered Session 지원을 어플리케이션 컨테이너에 의존적이지 않은 쉬운 작업으로 만들어줍니다.
- 아래 세가지 항목들에 대한 transparent integration 을 제공합니다.
- HttpSession
HttpSession
을 어플리케이션 컨테이너어 적합한 형태로 변경합니다.- Session ID 를 Http 헤더에 저장하는 것을 지원하여 RESTful API 와 궁합이 좋습니다.
- WebSocket
- 웹소켓 메시지를 전달 받을 때까지
HttpSession
이 살아 있도록 해줍니다. - WebSession
- Spring WebFlux 의
WebSession
을 어플리케이션 컨테이너에 적합한 형태로 변경합니다.
HttpSession Integration
Spring Session 은
HttpSession
과의 trsnsport integration 을 제공합니다.
- 즉, 개발자는
HttpSession
의 구현을 Spring Session 이 지원하는 형태로 변경할 수 있습니다.
Why Spring Session and HttpSession
?
이러한 투명한 통합이 주는 이점이 무엇을까요?
- Clustered Sessions - Clustered Session 지원을 어플리케이션 컨테이너에 의존적이지 않은 쉬운 작업으로 만들어줍니다.
- RESTful APIs - Spring Session 은 세션 id 를 헤더에 제공하게 하여 RESTful API의 동작을 도와줍니다.
SessionRepositoryFilter
세션 저장소 필터 는
- Srping Boot Configuration 에 의해
springSessionRepositoryFilter
라는 이름의 빈으로 등록됨
javax.servlet.http.HttpSession
을 Spring Session이 지원하는 custom implementation 으로 바꾸는 책임을 가짐

SessionRepository
세션 저장소는
- Spring Session 은
@SpringSessionDataSource
를 통해JdbcIndexedSessionRepository
에 주입될 datasource bean 을 explicit 하게 qualify 할 수 있음
@EnableJdbcHttpSession public class Config { @Bean @SpringSessionDataSource //This qualifier declares that firstDataSource is to be used by Spring Session. public EmbeddedDatabase firstDataSource() { return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2).addScript("org/springframework/session/jdbc/schema-h2.sql").build(); } @Bean public HikariDataSource secondDataSource() { // ... } }
Spring Security Integration
Spring Session 은
- Spring Security 의 Remember-me 인증과 통합을 제공합니다.
- 아래의 설정으로 RememberMeServices 를 SpringSessionRemberMeServices 로 변경할 수 있습니다.
@Override protected void configure(HttpSecurity http) throws Exception { http // ... additional configuration ... .rememberMe((rememberMe) -> rememberMe .rememberMeServices(rememberMeServices()) ); } @Bean public SpringSessionRememberMeServices rememberMeServices() { SpringSessionRememberMeServices rememberMeServices = new SpringSessionRememberMeServices(); // optionally customize rememberMeServices.setAlwaysRemember(true); return rememberMeServices; }
Spring Session 은
- Spring Security 의 동시 세션 제어 기능과의 통합을 제공합니다.
- 이를통해 default Spring Security 의 설정과 다른 clustered session 환경을 제공할 수 있습니다.
- 이는 Spring Security 의 SessionRegistry 인터페이스를 SpringSession의 SessionRepository를 활용한 SpringSessionBackedSessionRegistry로 설정하는 것으로 이루어집니다.
@Configuration public class SecurityConfiguration<S extends Session> extends WebSecurityConfigurerAdapter { @Autowired private FindByIndexNameSessionRepository<S> sessionRepository; @Override protected void configure(HttpSecurity http) throws Exception { // @formatter:off http // other config goes here... .sessionManagement((sessionManagement) -> sessionManagement .maximumSessions(2) .sessionRegistry(sessionRegistry()) ); // @formatter:on } @Bean public SpringSessionBackedSessionRegistry<S> sessionRegistry() { return new SpringSessionBackedSessionRegistry<>(this.sessionRepository); } }