📰 最近消息
Config 静态类在初始化的时候,会将Config.serialFilter 赋值为一个Global对象,这个Global 对象的filters字段值是jdk.serailFilter属性对应的 Function 列表。(关于 Global 对象介绍下面会说到,大家先有这么一个概念)而 ObjectInputStream 的构造函数中,正好取的就是 Config.serialFilter 这个静态字段 , 所以设置了 Config.serialFilter 这个静态字段,就相当于设置了 ObjectInputStream 类全局过滤器。比如可以通过配置 JVM 的 jdk.serialFil
过滤器的类型有两种,第一种是通过配置文件或者 JVM 属性来配置的全局过滤器,第二种则是来通过改变 ObjectInputStream 的 serialFilter 属性来配置的局部过滤器。设置全局过滤器,其实就是设置Config静态类的 serialFilter 静态字段值。具体原因是因为在 ObjectInputStream 的两个构造函数中,都会为 serialFilter 属性赋值为 ObjectInputFilter.Config.getSerialFilter() 。而 ObjectInputFilter.Config.getSerialFilter 就是直接返回 Config#s
设置局部过滤器的意思是在 new objectInputStream 对象之后,再通过改变单个 ObjectInputStream 对象的 serialFilter字段值来实现局部过滤。改变单个 ObjectInputStream 对象的 serialFilter 字段是有两种方法:1.通过调用 ObjectInputStream 对象的 setInternalObjectInputFilter 方法:低于 JDK 9 的时候,是 getInternalObjectInputFilter 和 setInternalObjectInputFilter,JDK 9 以及以上是 getObjectI
首先 LocateRegistry.createRegsitry:new RegistryImpl(port)中会 new 一个UnicastServerRef对象,将 RegistryImpl 的 id(OBJID.REGISTRY_ID,也就是 0 ) 存入到 LiveRef 对象,随后 LiveRef对象赋值到 UnicastServerRef 对象中的 ref 字段,并且将 RegsitryImpl::registryFilter 赋值给这个 UnicastServerRef 对象的 filter 字段:RegistryImpl 的 id 是 0 :随后在 RegistryImpl#s
在 UnicastServerRef#dispatch 中,由于 UnicastServerRef.skel 不为 null ,所以会调用 UnicastServerRef#oldDispatch 方法:oldDispatch 中会先调用 unmarshalCustomCallData(in) 方法,再调用 RegistryImpl_skel.dispatch 方法。unmarshalCustomCallData 方法中会进行判断,如果 UnicastServerRef.filter 不为 null ,就会设置 ConnectionInputStream的 serialFilter 字段值为