protected Serializable doCreate(Session session) 这个方法中的sessionId是做什么的?

来源:5-1 Shiro会话管理1

未卜先知

2018-07-22 17:55

protected Serializable doCreate(Session session) {
      Serializable sessionId = generateSessionId(session);   
      byte[] key = getKey(session.getId().toString());  
      byte[] value = SerializationUtils.serialize(session);  
      jedisUtil.set(key,value);  jedisUtil.expire(key,600);  
      return sessionId;
}

但是在存入Redis用的确是session.getId()

private void saveSession(Session session){
    if (session!=null&&session.getId()!=null){
        byte[] key = getKey(session.getId().toString());//添加前缀
        byte[] value = SerializationUtils.serialize(session); //将session序列化,以便存入redis
        jedisUtil.set(key,value);
        jedisUtil.expire(key,600);
    }
}

我不明白下面这个操作是做什么用的:

Serializable sessionId = generateSessionId(session);

然后在获取的时候用的是这个 Serializable sessionId

protected Session doReadSession(Serializable sessionId) {
    System.out.println("read session");
    if (sessionId==null){
        return null;
    }
    byte[] key = getKey(sessionId.toString());//添加key的前缀
    byte[] value = jedisUtil.get(key);
    return (Session)SerializationUtils.deserialize(value); //反序列化
}

存入的时候是使用的是直接从session.getId()没有序列化的,读取的时候是序列化的

写回答 关注

2回答

  • 九分石人
    2019-04-16 22:57:16

    在以后你需要从redis中拿去session时是要使用的

    protected Session doReadSession(Serializable sessionId) {
        if (sessionId == null) {
    	return null;
        }
        byte[] key = getKey(sessionId.toString());		
        byte[] value = jedisUtil.get(key);		
        return (Session) SerializationUtils.deserialize(value);
    }


  • 未卜先知
    2018-07-22 20:42:24

    发现答案在第二部分的1分40秒,这里忘了把id和session做关联

    未卜先知

    看了下源码,其实就是重置了session的id为序列化后的id

    2018-08-09 16:57:31

    共 1 条回复 >

Shiro安全框架入门

从零入门Shiro安全框架

48036 学习 · 332 问题

查看课程

相似问题