Module  java.base
软件包  java.io

Class 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
    • 方法详细信息

      • 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.ALLOWEDStatus.REJECTED结果。 如果不超过限制,没有模式与类匹配,则结果为Status.UNDECIDED

        参数
        pattern - 要解析的模式字符串; 不为空
        结果
        一个过滤器,用于检查正在反序列化的类; null如果没有模式
        异常
        IllegalArgumentException - 如果模式字符串非法或格式错误,无法解析。 特别是,如果有以下任何一个:
        • 如果缺少限制,名称或名称不是“maxdepth”,“maxrefs”,“maxbytes”或“maxarray”
        • 如果限制值不能由Long.parseLong解析或为负数
        • 如果模式包含“/”,并且模块名称丢失或剩余的模式为空
        • 如果包中缺少“。*”和“。**”