package kr.wisestone.owl.config; import kr.wisestone.owl.config.websocket.RedisSubscriber; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.listener.ChannelTopic; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.security.web.session.HttpSessionEventPublisher; import org.springframework.session.data.redis.config.ConfigureRedisAction; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer; /** * Created by jeong on 2019-02-28. */ @Configuration @EnableRedisHttpSession public class SessionConfiguration extends AbstractHttpSessionApplicationInitializer { @Value("${redis.host}") private String redisHost; @Value("${redis.port}") private int redisPort; @Value("${redis.common.topic}") private String redisCommonTopic; @Bean public RedisConnectionFactory redisConnectionFactory() { return new LettuceConnectionFactory(this.redisHost, this.redisPort); } @Bean public HttpSessionEventPublisher httpSessionEventPublisher() { return new HttpSessionEventPublisher(); } @Bean public ConfigureRedisAction configureRedisAction() { return ConfigureRedisAction.NO_OP; } @Bean public RedisSubscriber redisSubscriber() { return new RedisSubscriber(); } @Bean public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory redisConnectionFactory) { RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer(); redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory); redisMessageListenerContainer.addMessageListener(this.redisSubscriber(), new ChannelTopic(this.redisCommonTopic)); return redisMessageListenerContainer; } @Bean public StringRedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(); stringRedisTemplate.setConnectionFactory(redisConnectionFactory); stringRedisTemplate.setKeySerializer(new StringRedisSerializer()); stringRedisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(String.class)); return stringRedisTemplate; } }