【身份认证与控制二】分布式session共享(序列化问题)

本文介绍了如何利用Spring Session和Redis实现分布式Session,详细讲述了配置过程和可能出现的问题,包括序列化策略的调整,以及如何处理Session的创建、销毁和过期事件。并探讨了Spring Session的实时同步策略和索引查询会话的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis分布式Session

  1. 在首次获取session后,将sessionid作为键将对应session域信息序列化后保存到redis数据库内
  2. 需要获取session域信息时,拿着request携带的cookie中的sessionId值向redis数据库查找对应的数据,并反序列化为Session对象
    /**
     * 保存session
     *
     * @param req 请求信心
     * @return 结果
     */
    @GetMapping("/saveSession")
    public AjaxResult saveSession(HttpServletRequest req){
        System.out.println(new Date()+":::"+req.getSession().getId());
        HttpSession session = req.getSession();
        session.setAttribute("num",num++);
        String sessionString = JSON.toJSONString(session);
        redisFullUtil.set(session.getId(),sessionString);
        return AjaxResult.success(session.getId()+"::"+session.getAttribute("num"));
    }


    /**
     * 获取保存的session
     *
     * @param req 请求信息
     * @return 结果
     */
    @GetMapping("/getSession")
    public AjaxResult getSession(HttpServletRequest req){
        System.out.println(new Date()+":::"+req.getSession().getId());
        String sessionString = redisFullUtil.get(req.getSession().getId());
        HttpSession session = JSON.parseObject(sessionString, HttpSession.class);
        return AjaxResult.success(session.getAttribute("num"));
    }

程序运行后直接报错

com.alibaba.fastjson.JSONException: illegal setter

在这里插入图片描述

 原因是redis序列化依赖于set和get方法,session中有些数据属性是没有的,

spring-session-data-redis

转变思路一番搜索,现有技术是如何实现session分离,发现spring-session-data-redis就是专门做这件事的,还帮我们完成了大部分的工作,只需要做一些简答的配置工作即可完成session的分离

1. pom引入依赖

<!-- spring boot 与 redis 应用的基本配置 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<!-- spring session 与redis 应用环境基本配置, 需要开启redis后才可以使用, 不然启动会报错 -->
<dependency>
   <groupId>org.springframework.session</groupId>
   <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值