- java.lang.Object
-
- java.io.ObjectInputFilter.Config
-
- Enclosing interface:
- ObjectInputFilter
public static final class ObjectInputFilter.Config extends Object
一个实用程序类,用于设置和获取过程范围的过滤器或从模式字符串创建过滤器。 如果设置了一个过程范围的过滤器,它将被用于不设置自己的过滤器的每个ObjectInputStream
。设置过滤器时,它应该是无状态的并且是幂等的,当通过相同的参数时报告相同的结果。
在
ObjectInputFilter.Config
类的初始化期间配置过滤器。 例如,通过调用Config.getSerialFilter
。 如果定义了系统属性jdk.serialFilter
,则用于配置过滤器。 如果未定义系统属性,并且定义了Security
属性jdk.serialFilter
,则用于配置过滤器。 否则,在初始化期间未配置过滤器。 每个属性的语法与createFilter
方法相同。 如果未配置过滤器,则可以使用Config.setSerialFilter
进行设置。- 从以下版本开始:
- 9
-
-
方法摘要
所有方法 静态方法 具体的方法 Modifier and Type 方法 描述 static ObjectInputFilter
createFilter(String pattern)
从一个模式字符串返回一个ObjectInputFilter。static ObjectInputFilter
getSerialFilter()
如果未配置,则返回过程范围的序列化过滤器或null
。static void
setSerialFilter(ObjectInputFilter filter)
如果尚未配置或设置过程范围过滤器,请设置该过滤器。
-
-
-
方法详细信息
-
getSerialFilter
public static ObjectInputFilter getSerialFilter()
如果未配置,则返回过程范围的序列化过滤器或null
。- 结果
-
过程范围的序列化过滤器或
null
如果未配置
-
setSerialFilter
public static void setSerialFilter(ObjectInputFilter filter)
如果尚未配置或设置过程范围过滤器,请设置该过滤器。- 参数
-
filter
- 将串行化过滤器设置为过程范围过滤器; 不为空 - 异常
-
SecurityException
- 如果有安全管理员,并且没有授予SerializablePermission("serialFilter")
-
IllegalStateException
- 如果过滤器已经设置了non-null
-
createFilter
public static ObjectInputFilter createFilter(String pattern)
从一个模式字符串返回一个ObjectInputFilter。模式由“;”分隔 (分号)。 空格是重要的,被认为是模式的一部分。 如果一个模式包含一个等于赋值,“
=
”就设置了一个限制。 如果使用最后一个值多次出现限制。- maxdepth =
value
- 图形的最大深度 - maxrefs =
value
- 内部引用的最大数量 - maxbytes =
value
- 输入流中的最大字节数 - maxarray =
value
- 允许的最大数组长度
其他模式匹配或拒绝从
Class.getName()
返回的类或包名称,如果可选模块名称存在class.getModule().getName()
。 请注意,对于数组,元素类型在模式中使用,而不是数组类型。- 如果模式以“!”开始,则如果剩余的模式匹配,则该类被拒绝; 否则如果模式匹配,则允许该类。
- 如果模式包含“/”,则直到“/”的非空前缀是模块名称; 如果模块名称与该类的模块名称相匹配,则剩余模式与类名称相匹配。 如果没有“/”,则不会比较模块名称。
- 如果模式以“。**”结尾,则它匹配包中的所有类和所有子包。
- 如果模式以“。*”结尾,则它将与包中的任何类匹配。
- 如果模式以“*”结尾,则它将匹配任何具有模式的类作为前缀。
- 如果模式等于类名称,则它匹配。
- 否则,模式不匹配。
生成的过滤器执行限制检查,然后尝试匹配类(如果有)。 如果超出任何限制,则过滤器返回
Status.REJECTED
。 如果类是数组类型,则要匹配的类是元素类型。 任何数量的维数的数组都与元素类型相同。 例如,“!example.Foo
”的模式拒绝任何example.Foo
实例或数组的example.Foo
。 匹配的第一个模式,从左到右,确定了Status.ALLOWED
或Status.REJECTED
的结果。 如果不超过限制,没有模式与类匹配,则结果为Status.UNDECIDED
。- 参数
-
pattern
- 要解析的模式字符串; 不为空 - 结果
-
一个过滤器,用于检查正在反序列化的类;
null
如果没有模式 - 异常
-
IllegalArgumentException
- 如果模式字符串非法或格式错误,无法解析。 特别是,如果有以下任何一个:- 如果缺少限制,名称或名称不是“maxdepth”,“maxrefs”,“maxbytes”或“maxarray”
- 如果限制值不能由
Long.parseLong
解析或为负数 - 如果模式包含“/”,并且模块名称丢失或剩余的模式为空
- 如果包中缺少“。*”和“。**”
- maxdepth =
-
-