HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
Spring Security
Spring Security
/
Spring Session With HttpSession
Spring Session With HttpSession
Spring Session With HttpSession

Spring Session With HttpSession

@)See Also
  • Spring Session Docs

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 으로 바꾸는 책임을 가짐
notion image
 
 

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); } }