스프링 시큐리티에서 Redis를 이용해 세션을 공유하는 방법은 Spring Session이라는 별도의 프로젝트를 활용하는 것이 보편적입니다. Spring Session은 HttpSession을 Redis 같은 외부 저장소에 저장하여 여러 WAS 간 세션을 공유할 수 있게 하며, 스프링 시큐리티와도 통합되어 인증 세션을 안정적으로 관리할 수 있습니다.
Redis와 Spring Session 구성 방법
-
@EnableRedisHttpSession애노테이션을 사용해 Redis 기반 세션 저장소를 활성화한다. -
Redis 서버와 연결하기 위한
RedisConnectionFactory를 설정한다. -
Redis에 저장되는 세션의 키와 값을 적절히 직렬화하기 위해
RedisTemplate을 구성한다. -
이렇게 설정하면 스프링 시큐리티가 기본적으로 사용하는
HttpSession을 Redis-backed 세션으로 대체한다.
스프링 시큐리티와 세션 공유
-
Spring Security는 SecurityContext를 HttpSession에 저장하는데, Spring Session과 연동하면 이 데이터가 Redis에 저장된다.
-
여러 대의 WAS가 동일 Redis DB를 참조하므로 세션 공유가 가능해지고, 분산 환경에서도 동시성 제어 및 세션 관리가 가능하다.
-
스프링 시큐리티의 동시 세션 제어(concurrent session control)도 Redis 세션 저장소와 통합해 정상 작동한다.
세션 공유 설정 예시
@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
// Redis 서버 연결 설정 (localhost, 포트 6379 예시)
return new LettuceConnectionFactory(new RedisStandaloneConfiguration("localhost", 6379));
}
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}
}
스프링 시큐리티 설정에서 세션 관리

@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Autowired
private FindByIndexNameSessionRepository<?> sessionRepository;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.sessionManagement(session -> session
.maximumSessions(1)
.sessionRegistry(sessionRegistry())
)
.build();
}
@Bean
public SpringSessionBackedSessionRegistry<?> sessionRegistry() {
return new SpringSessionBackedSessionRegistry<>(sessionRepository);
}
}
이렇게 하면 Redis에 세션이 저장되어 여러 개의 서버가 동일 Redis를 연결할 때 세션이 공유됩니다. 인증 정보도 Redis에 저장되어 세션을 불러오는 어떤 서버에서든 인증 상태 유지가 가능합니다.
요약하면, 스프링 시큐리티에서 RADIUS 인증과 Redis 세션 공유 시 RADIUS 인증 결과를 스프링 시큐리티 인증 컨텍스트에 적용하고, 세션 저장소는 Spring Session + Redis를 이용해 여러 서버 간 공유하는 방식으로 구성구성합니다.