首页 > 其他分享 >springboot+spring-session

springboot+spring-session

时间:2022-12-04 15:23:08浏览次数:34  
标签:springboot spring redis session RedisTemplate 序列化 redisTemplate

1. 实现背景

    测试环境上部署了一个单机项目,项目的context-path为空,之后再经过nginx的转发进行部署,项目可以正常进行登录等等一系列操作;生产环境跟测试环境代码完全相同,只是相关的项目配置包括nginx配置不同,项目可以正常启动,但登录失败。原本以为是nginx相关的配置有问题,导致调完登录接口,返回的cookie中携带的项目名不一致导致的。经过检查发现登录接口返回的cookie中跟后续请求的cookie中的参数一致,所以跟配置无关。最后发现生产配置的项目是集群模式,所以根本还是出现在session共享上面。

2.具体实现

   这里做的共享session用的是redis,所以要安装redis并引入相关依赖;

<!--session-->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
<!-- redis依赖配置 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

   其次application.yml中添加相关配置

spring:
   session:
      store-type: redis #是否将session存到redis  none/redis
      timeout: 1800 # 配置session在redis中的过期时间
      redis:
      flush-mode: immediate #保存时刷新,即响应结束后刷新。默认是 on_save;immediate实时刷新
      namespace: smith:session #默认是spring:session
   redis:
      host: 127.0.0.1 # Redis服务器地址
      database: 0 # Redis数据库索引(默认为0)
      port: 6379 # Redis服务器连接端口
      password: # Redis服务器连接密码(默认为空)
      timeout: 3000ms # 连接超时时间

    到这里配置工作就完成了,启动项目即可。

3. 错误信息

 org.springframework.boot.autoconfigure.session.SessionRepositoryUnavailableException: No session repository could be auto-configured, check your configuration (session store type is 'redis')

    因为当store-type配置为redis的时候,redis是需要序列化的,所以我们还需要对restTemplate进行序列化。

@Configuration
public class RedisConfiguration {
    /**
     * @param redisConnectionFactory:配置不同的客户端,这里注入的redis连接工厂不同: JedisConnectionFactory、LettuceConnectionFactory
     * @功能描述 :配置Redis序列化,原因如下:
     * (1) StringRedisTemplate的序列化方式为字符串序列化,
     * RedisTemplate的序列化方式默为jdk序列化(实现Serializable接口)
     * (2) RedisTemplate的jdk序列化方式在Redis的客户端中为乱码,不方便查看,
     * 因此一般修改RedisTemplate的序列化为方式为JSON方式【建议使用GenericJackson2JsonRedisSerializer】
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // key采用String的序列化方式
        redisTemplate.setKeySerializer(StringRedisSerializer.UTF_8);
        // value序列化方式采用jackson
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        // hash的key也采用String的序列化方式
        redisTemplate.setHashKeySerializer(StringRedisSerializer.UTF_8);
        //hash的value序列化方式采用jackson
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }
}

 

标签:springboot,spring,redis,session,RedisTemplate,序列化,redisTemplate
From: https://www.cnblogs.com/shitechnology/p/16949937.html

相关文章

  • SpringCloud中Rabbitmq
    1.pom配置,添加以来jar包1<dependency>2<groupId>org.springframework.cloud</groupId>3<artifactId>spring-cloud-starter-bus-amqp</artifactId>4</depen......
  • SpringBoot集成数据传输加密
    前言近期在对开发框架安全策略方面进行升级优化,提供一些通用场景的解决方案,本文针对前后端数据传输加密进行简单的分享,处理流程设计如下图所示,本加密方法对原有项目兼容性......
  • SpringCloud中Redis
    1.引入redis相关jar包   pom配置<dependency>2<groupId>org.springframework.boot</groupId>3<artifactId>spring-boot-starter-data-redis</artifa......
  • SpringCloud中Rabbitmq的使用
    1.pom配置,添加以来jar包 pom配置2.配置文件配置setting.properties3.rabbitmq消息发送一 发送消息4.rabbitmq消息接收一 接受消息5.rabbitmq发送二 发送mq消......
  • springMvc04(json数据传递参数)
    一、集合参数(JSON格式)1.1-导入"JSON"坐标(通用设置一次就可以)<!--springmvc需要的json相关坐标--><dependency><groupId>com.fasterxml.jackson.......
  • SpringCloud中Rabbitmq的使用
    1#RabbitMq2spring.rabbitmq.host=${dev.spring.rabbitmq.host}3spring.rabbitmq.port=${dev.spring.rabbitmq.port}4spring.rabbitmq.username=${dev.spring.ra......
  • SpringCloud中Redis的使用
    1.引入redis相关jar包 pom配置2.配置Redis相关信息 config.properties3.读取Redis链接信息RedisConn redis链接pojo4.RedisConfig RedisConfig5.RedisUtils......
  • springboot中如何向redis缓存中存入数据
    packagecom.hope;importcom.fasterxml.jackson.core.JsonProcessingException;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.hope.domain.User;impor......
  • Springboot学习——路径参数
    一、场景输入不同的路径,调用不同的方法。例如,视频网站中,路径输入不同的模块,调用不同的视频二、使用方法@PathVariable参数表示该参数要从路径中获取//将需要输入的......
  • Spring循环依赖问题
    说明:  1.本文基于Spring-Framework5.1.x版本讲解  2.建议读者对创建对象部分源码有一定了解 概述这篇讲讲Spring循环依赖的问题,网上讲循环依赖的帖子太多太......