【发布时间】:2013-11-13 15:14:24
【问题描述】:
是否可以关闭/覆盖java.lang.SecurityException: Prohibited package name?
我需要扩展 AffineTransform 类,该类在实现时缺少一些功能,并且我需要访问定义为包保护的成员 m00, m01, ...。
【问题讨论】:
是否可以关闭/覆盖java.lang.SecurityException: Prohibited package name?
我需要扩展 AffineTransform 类,该类在实现时缺少一些功能,并且我需要访问定义为包保护的成员 m00, m01, ...。
【问题讨论】:
不,你不能。它在 java.lang.ClassLoader 中硬编码:
if ((name != null) && name.startsWith("java.")) {
throw new SecurityException
("Prohibited package name: " +
name.substring(0, name.lastIndexOf('.')));
...
如您所见,没有选项
【讨论】:
您可以使用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 中编写更广泛的转换代码。
Piccolo2D 库,它也与之绑定。
正如Evgeniy 指出的那样,检查是在 ClassLoader 中硬编码的,因此要规避这一点并非易事。但总有一个选择:-)
可以在启动时使用Java bootclasspath 选项或实施javaagent 以进行自己的改进。问题不在于它是否可行,而在于这在工作量和整体维护方面是否是最明智的解决方案。
但是请注意,由于这会引入潜在的安全漏洞,因此两者都无法做到,例如一个小程序。
【讨论】: