如何克服`禁止包名称'例外?

时间:2013-11-13 15:14:24

标签: java securityexception

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

我需要扩展AffineTransform类,这是因为缺少某些功能而实现的,我需要访问被定义为包受保护的成员m00, m01, ...

3 个答案:

答案 0 :(得分:5)

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

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

...

你可以看到没有选项

答案 1 :(得分:1)

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

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

<强>更新

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

更新2:

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

  • 渲染为BufferedImage
  • 创建NullOpImage
  • PerspectiveTransform NullOpImage
  • 并提取最终BufferedImage

答案 2 :(得分:0)

正如Evgeniy指出的那样,检查在ClassLoader中是硬编码的,所以绕过这个并不是一件容易的事。但总有一个选择:-)

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

然而,请注意,由于这会引入潜在的安全漏洞,因此无法做到这两点。小程序。