【问题标题】:How to overcome `Prohibited package name` exception?如何克服“禁止的包名”异常?
【发布时间】:2013-11-13 15:14:24
【问题描述】:

是否可以关闭/覆盖java.lang.SecurityException: Prohibited package name

我需要扩展 AffineTransform 类,该类在实现时缺少一些功能,并且我需要访问定义为包保护的成员 m00, m01, ...

【问题讨论】:

    标签: java securityexception


    【解决方案1】:

    不,你不能。它在 java.lang.ClassLoader 中硬编码:

        if ((name != null) && name.startsWith("java.")) {
            throw new SecurityException
                ("Prohibited package name: " +
                 name.substring(0, name.lastIndexOf('.')));
    

    ...

    如您所见,没有选项

    【讨论】:

      【解决方案2】:

      您可以使用getMatrix(double[] flatmatrix) 读取这些值。没有对应的setMatrix,但是有AffineTransform(double[] flatmatrix)的构造函数。

      出于好奇,您所说的“缺乏功能”是什么?

      更新:

      啊,好的。 Java2D 实际上只是用于基本的 2D 转换。对于任何涉及深度的内容,您可能需要查看一些 Java / OpenGL 绑定。

      更新 2:

      另一个要检查的库是Java Advanced Imaging (JAI) API。可能的缺点是没有积极维护;最后一次更新是在 2006 年。它完全专注于图像,因此您需要:

      • 渲染到BufferedImage
      • 从中创建一个NullOpImage
      • PerspectiveTransformNullOpImage
      • 并提取最终的BufferedImage

      【讨论】:

      • 我的意思是有理线性变换(包括透视变换)。我从JAI 中提取了PerspectiveTransform 并将其设为extends AffineTransform,以便在标准PathIterator 中编写更广泛的转换代码。
      • 谢谢!但我想要的是2D。我也想与 AWT 绑定,因为我使用 Piccolo2D 库,它也与之绑定。
      【解决方案3】:

      正如Evgeniy 指出的那样,检查是在 ClassLoader 中硬编码的,因此要规避这一点并非易事。但总有一个选择:-)

      可以在启动时使用Java bootclasspath 选项或实施javaagent 以进行自己的改进。问题不在于它是否可行,而在于这在工作量和整体维护方面是否是最明智的解决方案。

      但是请注意,由于这会引入潜在的安全漏洞,因此两者都无法做到,例如一个小程序。

      【讨论】:

        猜你喜欢
        • 2014-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-25
        • 1970-01-01
        相关资源
        最近更新 更多