java.security.AccessControlException随机出现在applet中,尽管它应该具有权限

时间:2011-05-03 10:44:37

标签: java security applet

我有一个applet,在尝试访问网页时会抛出java.security.AccessControlException。我知道applet只允许访问他们自己下载的同一主机。有问题的网页位于同一主机上 - 但我仍然收到此错误。

第一次运行applet时不会发生错误。重新启动浏览器并重新运行applet时,将引发异常。如果重新加载页面,则异常消失。

错误来自此代码:

JTextPane.setPage(URL);

在此代码之前,applet正在下载其他网络资源,他们不会抛出任何异常。

抛出异常:

java.security.AccessControlException: access denied
(java.net.SocketPermission 131839-QR1WS02:18080 connect,resolve)
java.lang.RuntimeException: java.security.AccessControlException: access
denied (java.net.SocketPermission 131839-QR1WS02:18080 connect,resolve)
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(Unknown Source)
   at java.net.HttpURLConnection.getResponseCode(Unknown Source)
   at javax.swing.JEditorPane.getStream(Unknown Source)
   at javax.swing.JEditorPane.setPage(Unknown Source)
   at Browser.setPage(Browser.java:76)

在抛出此异常之后,访问具有几乎相同URL的另一个网页,没有任何问题。

为什么会发生这种情况,看似随意?

我已经使用不同的浏览器测试了相同的结果。

谢谢!

更新:它似乎是JTextPane.setPage(URL)的错误。我已经做了这样的解决方法:

try {
        pane.setPage(u);
    } catch (Exception e) {
        try {               
            BufferedReader reader = new BufferedReader(new InputStreamReader(u.openStream()));
            String page = "";
            while(reader.ready()) {
                page += reader.readLine();
            }
            pane.setContentType("text/html");
            pane.setText(page);
        } catch (Exception e1) {
        }
    }

基本上,如果setPage(URL)抛出异常,则此代码将尝试下载相同URL的内容并手动设置JTextPane的内容。到目前为止,这似乎解决了这个问题。

0 个答案:

没有答案