我有一个Jarame和一个JPanel。我正在加载一些不可信的第三方代码,需要将一些组件添加到我的JPanel中。我如何对我的JPanel进行沙盒处理,以使第三方组件无法访问JPanel之外的资源(例如JFrame)?JFrame中的Sandbox JPanel
回答
这会很困难,因为你的JPanel扩展了getParent()的JComponent,它将返回你的JFrame ...因为Swing中的每个组件都实现了它,所以很可能你的第三方组件也实现了它。 您可以尝试覆盖这些方法,但我不认为这个摆动仍然会正常工作,因为您可以通过这样做来削减ComponentTree ...
您能解释如何加载不受信任的代码吗?它是一个库还是你在运行时通过反射或类似的东西加载?
对不起,我忘了提到这一点。我使用URLClassLoader在运行时加载代码。基本上,我动态加载类,创建一个新的实例,然后我调用该实例返回SWING组件像JPanel或JButton的一些方法。我应该创建一个新的JFrame而不是将它们添加到JPanel中吗? – Flavio
嗯,JFrame将成为ComponentTree的根。这听起来不错。但是,这将改变GUI的使用和设计... 也许更重要的是限制对文件系统和网络的访问。即使你找到一种方法来限制对Swing类的访问,那也不会阻止外部代码访问本地机器上的其他数据并将它发送到Internet上的某个服务器。 – treeno
其实我有一个自定义的SecurityManager。在我的窗口“安全”加载外部组件是我无法解决的唯一问题,因为例如他们可以调用.getParent()并修改它。创建一个新的JFrame可能会起作用,但它确实会混淆整个UI。我仍然试图看看我是否可以用JPanel做一些有用的事情 – Flavio
- 1. JFrame中的JPanel
- 2. JFrame中看不到JPanel中的子JPanel
- 3. JFrame和JPanel居中
- 4. 添加的JPanel到JFrame中
- 5. 从JFrame到Netbeans中的JPanel
- 6. JFrame中的CardLayout JPanel GUI
- 7. 更新JFrame中的JPanel
- 8. JPanel vs Java中的JFrame
- 9. 在从的JFrame JPanel中
- 10. JFrame vs JPanel
- 11. JPanel Contains JFrame内
- 12. 在JFrame中用JPanel替换JPanel
- 13. 在JFrame中居中JPanel
- 14. 将JPanel添加到JFrame中
- 15. Eclipse:在JFrame中添加JPanel
- 16. 从JFrame中清除JPanel
- 17. 把JFrame放到jPanel中
- 18. JPanel不显示在JFrame中
- 19. 在JFrame中移动JPanel
- 20. 将JPanel添加到JFrame中
- 21. 在JFrame中设置JPanel?
- 22. 问题JPanel,JFrame,BoxLayout
- 23. JFrame和JPanel问题
- 24. Java,swing,JFrame和JPanel
- 25. 清除JPanel或JFrame
- 26. 的JFrame和ActionListener的JPanel的
- 27. 用的JFrame和JPanel的
- 28. 的JFrame与动态的JPanel
- 29. JFrame中的JPanel中的组件
- 30. 来自JPanel的隐形JFrame
您可以尝试在基于安全性的类加载器中加载第三方代码。你自己没有这样做,但你可以看看[这个](http://stackoverflow.com/questions/1791060/java-security-classloader) – MadProgrammer
你看过[安全经理](http://docs.oracle.com .com/javase/7/docs/api/java/lang/SecurityManager.html)? – Marc
安全管理员不处理文件访问等内容吗?我不知道它可以限制对象的访问,就像弗拉维奥想要的那样。 – treeno