-
- Functional Interface:
- 这是一个功能接口,因此可以用作lambda表达式或方法引用的赋值目标。
@FunctionalInterfacepublic interface ObjectInputFilter
在反序列化期间过滤类,数组长度和图表度量。警告:不受信任数据的反序列化本质上是危险的,应该避免。 应根据Secure Coding Guidelines for Java SE的“序列化和反序列化”部分仔细验证不受信任的数据。 Serialization Filtering描述了防御性使用串行过滤器的最佳实践。
如果在ObjectInputStream
上设置,则调用checkInput(FilterInfo)
方法以验证类,每个数组的长度,从流中读取的对象数,图的深度以及从流中读取的总字节数。可以通过
setObjectInputFilter
为单个ObjectInputStream设置过滤器。 可以通过Config.setSerialFilter
设置过滤器,以影响无法设置过滤器的每个ObjectInputStream
。过滤器确定参数是
ALLOWED
还是REJECTED
,并应返回相应的状态。 如果过滤器无法确定状态,则应返回UNDECIDED
。 应根据特定用例和预期类型设计过滤器。 为特定用途设计的过滤器可以传递给过滤器范围之外的类。 如果过滤器的目的是列出黑名单,那么它可以拒绝匹配的候选类,并为其他人报告UNDECIDED。 可以用类被称为过滤等于null
,arrayLength
等于-1,深度,引用的数量,以及流大小,并返回反映只有一个或只有一些值的状态。 这允许过滤器具体说明其报告的选择并使用其他过滤器而不强制允许或拒绝状态。通常,自定义筛选器应检查是否配置了流程范围的筛选器,如果是,则将其推迟。 例如,
ObjectInputFilter.Status checkInput(FilterInfo info) { ObjectInputFilter serialFilter = ObjectInputFilter.Config.getSerialFilter(); if (serialFilter != null) { ObjectInputFilter.Status status = serialFilter.checkInput(info); if (status != ObjectInputFilter.Status.UNDECIDED) { // The process-wide filter overrides this filter return status; } } if (info.serialClass() != null && Remote.class.isAssignableFrom(info.serialClass())) { return Status.REJECTED; // Do not allow Remote objects } return Status.UNDECIDED; }
除非另有说明,否则将
null
参数传递给此接口中的方法及其嵌套类将导致抛出NullPointerException
。- 从以下版本开始:
- 9
- 另请参见:
-
ObjectInputStream.setObjectInputFilter(ObjectInputFilter)
-
-
嵌套类汇总
嵌套类 变量和类型 接口 描述 static class
ObjectInputFilter.Config
用于设置和获取进程范围过滤器或从模式字符串创建过滤器的实用程序类。static interface
ObjectInputFilter.FilterInfo
通过FilterInfo,可以访问有关正在反序列化的当前对象的信息以及ObjectInputStream
的状态。static class
ObjectInputFilter.Status
检查类,数组长度,引用数,深度和流大小的状态。
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 ObjectInputFilter.Status
checkInput(ObjectInputFilter.FilterInfo filterInfo)
检查类,数组长度,对象引用数,深度,流大小和其他可用的过滤信息。
-
-
-
方法详细信息
-
checkInput
ObjectInputFilter.Status checkInput(ObjectInputFilter.FilterInfo filterInfo)
检查类,数组长度,对象引用数,深度,流大小和其他可用的过滤信息。 此方法的实现检查反序列化期间正在创建的对象图的内容。 该过滤器返回Status.ALLOWED
,Status.REJECTED
,或Status.UNDECIDED
。- 参数
-
filterInfo
- 提供有关正在反序列化的当前对象的信息(如果有)以及ObjectInputStream
的状态 - 结果
-
Status.ALLOWED
如果接受的话,Status.REJECTED
,如果拒绝,Status.UNDECIDED
,如果拿不定主意。
-
-