gpt4 book ai didi

java - 自签名小程序在写入文件时抛出 SecurityException

转载 作者:行者123 更新时间:2023-11-29 09:12:54 24 4
gpt4 key购买 nike

我想制作一个能够将文件下载到计算机的小程序,然后在相关的编辑器中打开它们(当文件被保存时,应该会再次上传)。然而,在我花几个小时让它工作之前,我必须确保它实际上是可管理的(用 Java 桌面应用程序而不是 Applet 完成它)。

所以我写了一个简单的小程序,如果文件不存在就创建一个文件。该应用已签名并按应有的方式加载到浏览器中。以下内容写入屏幕:

IO Exception: Access is denied

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

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。我坚信我已经做了我应该做的一切......

最佳答案

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

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

System.getProperty("user.home")

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

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

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

关于java - 自签名小程序在写入文件时抛出 SecurityException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11298387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com