2

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

我需要扩展AffineTransform在某些缺乏功能的情况下实现的类,并且我需要访问m00, m01, ...定义为包保护的成员。

4

3 回答 3

5

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

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

...

如您所见,没有选择

于 2013-11-13T15:17:46.213 回答
1

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

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

更新:

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

更新 2:

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

  • 渲染到BufferedImage
  • NullOpImage从中创建一个
  • PerspectiveTransformNullOpImage
  • 并提取最终BufferedImage
于 2013-11-13T17:03:42.160 回答
0

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

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

但是请注意,由于这会引入潜在的安全漏洞,因此对于 Applet 等,两者都无法做到。

于 2015-10-20T15:12:38.093 回答