如何自定义 ConfigurableObjectInputStream 并使用扩展的 LookAheadObjectInputStream

问题描述

我们的技术栈是spring,使用hibernate的JPA,sql server。我们使用 jackson 为 REST 实现进行 json 序列化/反序列化。 几个问题:

In our model class - we have implements Serializable
Jackson objectmapper which spring uses also implements Serializable.

正如我们所见,Hibernate 具有二进制序列化(Java),jackson 是基于文本(json)的序列化。

  1. 问题 1:spring 和 jpa/hibernate 实现时, 休眠使用 ConfigurableObjectInputStream
  2. 问题 2:是否 jackson 使用 ConfigurableObjectInputStream
  3. 问题 3:如何 通知 spring 使用 LookAheadobjectInputStream 而不是 ConfigurableObjectInputStream(详见下文)。

我们希望强化 Java 的 ObjectInputStream 的所有使用,并确保我们的应用程序中没有反序列化问题

https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html#harden-your-own-javaioobjectinputstream 的启发,我们想定义一个 LookAheadobjectInputStream,它可以扩展 ConfigurableObjectInputStream,我们可以在其中定义我们自己的可以解析的应用程序类。

如何通知spring使用LookAheadobjectInputStream代替ConfigurableObjectInputStream

public class LookAheadobjectInputStream extends ConfigurableObjectInputStream {{

    public LookAheadobjectInputStream(InputStream inputStream) throws IOException {
        super(inputStream);
    }

    /**
    * Only deserialize instances of our expected Bicycle class
    */
    @Override
    protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException,ClassNotFoundException {
        if (!desc.getName().equals(Bicycle.class.getName())) {
            throw new InvalidClassException("Unauthorized deserialization attempt",desc.getName());
        }
        return super.resolveClass(desc);
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)