- 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
-
-
方法摘要
所有方法 静态方法 具体的方法 变量和类型 方法 描述 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
。 从左到右匹配的第一个模式确定Status.ALLOWED
或Status.REJECTED
结果。 如果未超出限制且没有模式与类匹配,则结果为Status.UNDECIDED
。- 参数
-
pattern
- 要解析的模式字符串; 不是空的 - 结果
-
用于检查正反序列化的类的过滤器;
null
如果没有图案 - 异常
-
IllegalArgumentException
- 如果模式字符串非法或格式错误且无法解析。 特别是,如果满足以下任何条件:- 如果缺少限制,则名称或名称不是“maxdepth”,“maxrefs”,“maxbytes”或“maxarray”之一
- 如果限制值无法通过
Long.parseLong
解析或为负数 - 如果模式包含“/”且模块名称丢失或剩余模式为空
- 如果“。*”和“。**”缺少包裹
- maxdepth =
-
-