写入文件时,自签名Applet会抛出SecurityException

时间:2012-07-02 17:30:50

标签: java applet self-signed securityexception appletviewer

我想创建一个能够将文件下载到计算机的Applet,然后在关联的编辑器中打开它们(当文件被保存时,它应该再次上传回来)。但是,在我花费数小时才能使用它之前,我必须确保它实际上是可管理的(使用Java桌面应用程序完成它而不是Applet)。

所以我写了一个简单的applet,如果它不存在,就会创建一个文件。该应用已签名,并在浏览器中加载。以下内容写入屏幕:

  

IO例外:访问被拒绝

我已经标记了不同的错误,所以我知道哪一个失败了。以下是我的小程序:

import javax.swing.*;
import java.security.*;
import java.io.*;

public class DocumentApplet extends JApplet
{
    private static final long serialVersionUID = -2354727776089972258L;

    public void start ()
    {
        add ( new JButton ("Hello, World") );

        AccessControlContext acc = (AccessControlContext) System.getSecurityManager().getSecurityContext();
        try
        {
            acc.checkPermission(new FilePermission("test.txt", "write"));
        }
        catch (SecurityException e)
        {
            add (new JLabel ("Permission Exception: " + e.getMessage()));
            return;
        }

        try
        {
            File f = AccessController.<File>doPrivileged(new PrivilegedAction<File>()
            {
                public File run()
                {
                    return new File ("test.txt");
                }
            });

            if ( ! f.exists())
            {
                f.createNewFile();
            }
        }
        catch (AccessControlException e)
        {
            add (new JLabel ("Access: " + e.getMessage()));
        }
        catch (IOException e)
        {
            add ( new JLabel ("IO Exception: " + e.getMessage()));
        }
    }
}

这是被抛出的最后一个异常。请注意,我做的第一件事是检查权限。那个检查不会失败。

Applet是自签名的,但这只是暂时的。 如果小程序失败,我不想花费数百美元购买证书。

当我使用 appletviewer 运行应用程序时,代码可以运行。没关系,但我需要知道,当我购买真正的证书时它会起作用。

HTML代码:

<applet code="DocumentApplet" archive="applet.jar" width="300" height="200">
</applet>

环境:Windows7 + JDK 1.7.0_05

PS:我也花了两天时间阅读Stackoverflow并搜索Google。我坚信我已经完成了我应该做的一切......

1 个答案:

答案 0 :(得分:0)

我不知道是什么原因,但我设法通过在文件名前加上来成功写入文件:

System.getProperty("java.io.tmpdir")

System.getProperty("user.home")

这是一个疯狂的镜头,因为自从错误消息告诉我“拒绝访问”,我认为这是因为安全问题。

所以其他可能遇到同样问题的人:

  • 不要将文件写入除提供的两个目录以外的任何其他目录。记住,Windows通常不允许将文件写入C:\,即使对于使用Windows资源管理器的用户也是如此。