shiro session序列化失败问题

版权声明:有什么深入的见解,欢迎评论补充,一起学习进步 https://blog.csdn.net/mengxiangxingdong/article/details/88537105

场景

今天一时兴起想要做个在线用户功能,同时支持内存,mysql,redis三库 都能够持久化的功能,没想到被序列化打败了
shiro SessionDao 的session 实现了ValidatingSession接口,当序列化时转变成字符串会导致多出来

“valid”:true

解决方法

存储session字段修改为byte[]
反序列化的代码修改为

                SimpleSession simpleSession = (SimpleSession) SerializationUtils.deserialize(userSession.getSessionStr());
                session = simpleSession;

如果还没解决请看这里

1.首先我们只看序列化session代码

    @Test
    public void testSession() throws UnsupportedEncodingException {
        Session session = new SimpleSession();
        // 序列化为byte数组
        byte[] bytes = SerializationUtils.serialize((Serializable) session);
        System.err.println(new String(bytes)); // ��
        System.err.println(FastJsonUtil.toJSONString(session)); // {"attributeKeys":[],"valid":true}
//        Session session2 = (Session) SerializationUtils.deserialize(bytes);
//        System.err.println(session2);
    }

我们看对应的输出中 明显多了这个属性"valid":true
2.所以解决方式就不能转变成String入手
以下解决方案
1.采用byte[]存储
2.采用流的方式

猜你喜欢

转载自blog.csdn.net/mengxiangxingdong/article/details/88537105