복붙노트

[SPRING] Spring 4에서 관계형 데이터베이스 기반 HTTP 세션 지속성을 수행하려면 어떻게해야합니까?

SPRING

Spring 4에서 관계형 데이터베이스 기반 HTTP 세션 지속성을 수행하려면 어떻게해야합니까?

여러 프런트 엔드 서버에서 프런트 엔드 사용자의 상태 비 저장 부하 분산을 수행하기 위해 관계형 데이터베이스에 HTTP 세션을 저장할 수 있어야합니다. 스프링 4에서 어떻게 이것을 할 수 있습니까?

어떻게하면 Redis에서이 작업을 수행 할 수 있는지 알 수 있습니다. 그러나 관계형 데이터베이스를 사용하여이를 수행하는 방법에 대한 문서는 보이지 않습니다. Postgres.

해결법

  1. ==============================

    1.Spring Session (투명하게 Java EE의 HttpSession을 오버라이드)을 사용하면 SessionRepository 인터페이스를 가져 와서 사용자 정의 예와 함께 구현할 수 있습니다. JdbcSessionRepository. 그것은 일종의 쉽습니다. 구현이 완료되면 수동으로 (@EnableRedisHttpSession annotation이 필요하지 않음) 필터를 작성하여 필터 체인에 추가하십시오.

    Spring Session (투명하게 Java EE의 HttpSession을 오버라이드)을 사용하면 SessionRepository 인터페이스를 가져 와서 사용자 정의 예와 함께 구현할 수 있습니다. JdbcSessionRepository. 그것은 일종의 쉽습니다. 구현이 완료되면 수동으로 (@EnableRedisHttpSession annotation이 필요하지 않음) 필터를 작성하여 필터 체인에 추가하십시오.

    @Configuration
    @EnableWebMvcSecurity
    public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    
       //other stuff...
    
       @Autowired
       private SessionRepository<ExpiringSession> sessionRepository;
    
       private HttpSessionStrategy httpSessionStrategy = new CookieHttpSessionStrategy(); // or HeaderHttpSessionStrategy
    
       @Bean
       public SessionRepository<ExpiringSession> sessionRepository() {
           return new JdbcSessionRepository();
       }
    
       @Override
       protected void configure(HttpSecurity http) throws Exception {
           super.configure(http);
           SessionRepositoryFilter<ExpiringSession> sessionRepositoryFilter = new SessionRepositoryFilter<>(sessionRepository);
           sessionRepositoryFilter.setHttpSessionStrategy(httpSessionStrategy);
           http
                .addFilterBefore(sessionRepositoryFilter, ChannelProcessingFilter.class);
       }
    }
    

    SessionRepository 인터페이스가 어떻게 생겼는지 살펴 보겠습니다. 구현할 수있는 방법은 4 가지뿐입니다. Session 객체를 생성하는 방법은 MapSessionRepository 및 MapSession 구현 (또는 RedisOperationsSessionRepository 및 RedisSession)에서 확인할 수 있습니다.

    public interface SessionRepository<S extends Session> {
       S createSession();
       void save(S session);
       S getSession(String id);
       void delete(String id);
    }
    

    예제 솔루션 https://github.com/Mati20041/spring-session-jpa-repository

  2. ==============================

    2.스프링 세션을 그냥 치면 완료됩니다. Redis 클라이언트 빈을 추가하고 @EnableRedisHttpSession을 사용하여 구성 클래스에 주석을다는 것은 모두 필요한 것입니다.

    스프링 세션을 그냥 치면 완료됩니다. Redis 클라이언트 빈을 추가하고 @EnableRedisHttpSession을 사용하여 구성 클래스에 주석을다는 것은 모두 필요한 것입니다.

  3. from https://stackoverflow.com/questions/31396362/how-can-i-do-relational-database-based-http-session-persistence-in-spring-4 by cc-by-sa and MIT license