I have a signed
applet, which uses a custom class loader. Here is a brief explanation of what I am doing:
Applet loads data files from the server, and decompresses them using my custom class loader.
Applet launches main class.
This allows me to use a better compression algorithm than Zip. It works great until one of the loaded classes calls getClass()getResource("blah"); I have implemented findResource(
String) for my class loader, which uses a custom URLStreamHandler to provide the InputStream for the URL. It returns a ByteArrayInputStream containing a copy of the data read from the data file.
At first this did not work, as the URL constructor would throw a security exception because it did not want to allow any custom URLStreamHandlers. I got around this by using AccessController.doPrivileged(...); I'm not sure why this is needed, since my applet is signed.
Now, this works and I get a working URL... but it throws a security exception down in Swing. :-(
Here is a trace:
java.security.AccessControlException: access denied (java.security.AllPermission <all permissions> <all actions>
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at sun.awt.SunToolkit.getImageFromHash(Unknown Source)
at sun.awt.SunToolkit.getImage(Unknown Source)
at javax.swing.ImageIcon.<init>(Unknown Source)
at javax.swing.ImageIcon.<init>(Unknown Source)
at <snip>.NavigationToolbar$CompassRose.<init>(Unknown Source)
at <snip>.NavigationToolbar.<init>(Unknown Source)
at <snip>.MapFrame.intialize(Unknown Source)
at <snip>.MapViewer.initWindowMode(Unknown Source)
at <snip>.MapViewer.init(Unknown Source)
at launcher.AppletLauncher.start(Unknown Source)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
I really don't want to muck around with all of the getResource(String) calls. Isn't it odd that I have already loaded classes from an external source, but I can't display an image which is already in memory??
I am signing my applet with an RSA style certificate, so I should have all privileges.