SpringMVC配置Session-Redis出错

1. 项目开发中需要用到多个redis,一个用于读取数据,另一个用于写数据。由于项目是集群环境,因此不能使用普通的session存储,用到了session服务器,由于性能不佳,先更换为session-redis,即把session信息存入redis中。

2. session-redis配置如下:

1)springContext.xml中:


 

2)web.xml中:

   

 

3)pom.xml中:


 

3. 由于session-redis默认会关联redisConnectionFactory,但是由于配置文件中存在两个redisConnectionFactory,因此会提示“存在重复的bean”,此刻需要在其中的一个redisConnectionFactory bean中加入 primary="true"(意思是当一个bean的primary为true的,那该bean在autowired是byType或byName时 就是首选。)问题完美解决。

 

Spring MVC 5.2 版本整合 Spring Session with Redis 2.2 主要是为了在分布式环境中利用缓存技术来管理和同步用户的会话数据,使得应用程序可以在多个节点上同时提供服务。下面是基本步骤: 1. 添加依赖:在你的 Maven 或 Gradle 项目中添加以下依赖: ```xml <!-- Maven --> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> <version>2.2.x</version> </dependency> <!-- Gradle --> implementation 'org.springframework.session:spring-session-data-redis:2.2.x' ``` 2. 配置 Redis:在 `application.properties` 或 `application.yml` 中配置 Redis 连接信息: ```properties spring.redis.host=localhost spring.redis.port=6379 spring.redis.password=<your_redis_password> ``` 3. 创建 RedisTemplate:创建并配置 RedisTemplate,用于操作 Redis 数据库。 ```java @Bean public RedisTemplate<String, HttpSession> sessionRedisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, HttpSession> template = new RedisOperationsSessionRepository<>(factory); Jackson2JsonRedisSerializer<Object> jsonSerializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jsonSerializer.setObjectMapper(om); template.setValueSerializer(jsonSerializer); template.setKeySerializer(new StringRedisSerializer()); return template; } ``` 4. 配置 Spring Session:在 Spring 容器中开启 session 管理。 ```java @Configuration @EnableWebMvc @EnableGlobalMethodSecurity(prePostEnabled = true) public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private HttpSessionEventPublisher publisher; @Bean public HttpSessionStrategy httpSessionStrategy() { return new DefaultSavedRequestAwareSessionStrategy(); } @Override protected void configure(HttpSecurity http) throws Exception { http .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .formLogin() .disable() .and() .logout() .logoutSuccessUrl("/") .deleteCookies("JSESSIONID") .invalidateHttpSession(true); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // 如果有需要,可以在此处配置认证机制 } @Bean public CacheManager cacheManager(RedisConnectionFactory factory) { SimpleCacheManager manager = new SimpleCacheManager(); manager.setCacheNames(Arrays.asList("sessions")); RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofMinutes(15)) .serializeKeysWith(RedisSerializationSupport.STRING) .serializeValuesWith(jsonSerializer); manager.setCacheDefaults(config); return manager; } } ``` 5. 启用 Spring Session 支持:在 `WebMvcConfigurer` 接口中配置 session 存储: ```java @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { // 如果你想支持序列化/反序列化 JSON,这里添加一个 Jackson2JsonHttpMessageConverter } } ``` 完成上述步骤后,Spring MVC 5.2 就已经整合了 Spring Session with Redis 2.2,会话数据会被存储在 Redis 中,提供分布式场景下的会话管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值