Kryonet - 如何在序列化期间获取发送者(连接)?

Kryonet - how to get the sender (Connection) during serialization?

我有一个非常非常大的问题。我正在对数据包使用 AES 序列化,但出现了问题。

Kryo 中的序列化程序如下所示:

public class AESSerializer extends Serializer {
    private final Serializer serializer;

    public AESSerializer (Serializer serializer) {
       this.serializer = serializer;
    }

    public void write (Kryo kryo, Output output, Object object) {
        // USE AES KEY TO ENCRYPT
        // WRITE OBJECT
    }

    public Object read (Kryo kryo, Input input, Class type) {
        // USE AES KEY TO DECRYPT
        // READ OBJECT
    }

}

这里的问题是每个用户都必须拥有自己的 SecretAESKey。我找不到任何方法从序列化器获取连接列表,而且当我阅读 Kryonet 的代码时——它们不会将它传递到任何地方。我需要获取写入对象的连接以获取它的 AES 密钥。

序列化器构造函数不是一个选项,因为序列化器是每个应用程序一个,而不是每个用户一个。

你们知道如何处理这样的事情吗?

Kryo 内置了这段代码:

public synchronized void write (Connection connection, ByteBuffer buffer, Object object) {
   output.setBuffer(buffer);
   kryo.getContext().put("connection", connection);
   kryo.writeClassAndObject(output, object);
   output.flush();
}

public synchronized Object read (Connection connection, ByteBuffer buffer) {
   input.setBuffer(buffer);
   kryo.getContext().put("connection", connection);
   return kryo.readClassAndObject(input);
}

在您的序列化程序调用中:

Connection connection = (Connection) kryo.getContext().get("connection");

你有联系。