Applet-java.awt.awtpermission访问剪贴板
我创建了一个小程序来从剪贴板中捕获图像。当我在HTML中运行小程序时,它抛出accesscontrolexception拒绝访问(java.awt.awtpermission accessclipboard) JavaApplet-java.awt.awtpermission访问剪贴板,java,html,security,applet,accesscontrolexception,Java,Html,Security,Applet,Accesscontrolexception,我创建了一个小程序来从剪贴板中捕获图像。当我在HTML中运行小程序时,它抛出accesscontrolexception拒绝访问(java.awt.awtpermission accessclipboard) Java import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.Toolkit; import java.awt.Color; import java
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.Toolkit;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import javax.swing.JApplet;
import javax.swing.JOptionPane;
import javax.swing.ImageIcon;
import java.io.ByteArrayOutputStream;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
import java.net.URL;
import java.net.URLConnection;
import java.io.InputStream;
import javax.swing.JLabel;
public class PasteImageApplet extends JApplet{
Clipboard clipboard;
Toolkit toolkit;
JLabel lbl;
public String getClipboardImageURL(String server){
lbl.setText("pasting image");
String url = "";
try{
DataFlavor dataFlavor = DataFlavor.imageFlavor;
System.out.println(dataFlavor.getDefaultRepresentationClass());
Object object = null;
try{
object = clipboard.getContents(null).getTransferData(dataFlavor);
}catch (Exception e){
JOptionPane.showMessageDialog(null, "No image found.");
return "";
}
BufferedImage img = (BufferedImage) object;
BufferedImage bimg = null;
int w = img.getWidth(null);
int h = img.getHeight(null);
bimg = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
ImageIcon ii = new ImageIcon(img);
ImageObserver is = ii.getImageObserver();
bimg.getGraphics().setColor(new Color(255, 255, 255));
bimg.getGraphics().fillRect(0, 0, w, h);
bimg.getGraphics().drawImage(ii.getImage(), 0, 0, is);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(stream);
jpeg.encode(bimg);
URL u = new URL(server);
URLConnection con = u.openConnection();
//String boundary = "-----------------------------7d637a1aa100de";
con.setDoOutput(true);
con.getOutputStream().write(stream.toByteArray());
/*con.getOutputStream().write(((String)
"--"+boundary+"\r\n "+
"Content-Disposition: form-data; name=\"img\"; filename=\"filename\"\r\n"+
"Content-Type: image/jpeg\r\n "+
"Content-Transfer-Encoding: base64\r\n\r\n" +
Base64.encodeBytes(stream.toByteArray())).getBytes());*/
con.connect();
InputStream inputStream = con.getInputStream();
byte [] urlBytes = new byte [inputStream.available()];
inputStream.read(urlBytes);
url = new String(urlBytes);
System.out.print(url);
lbl.setText("image pasted");
} catch (Exception exc){
lbl.setText("an error occurred: " + exc.getMessage());
/*if (ShowExceptions.ShowExceptions)
exc.printStackTrace();*/
}
return url;
}
public void init() {
lbl = new JLabel("");
lbl.setText("applet started");
add(lbl);
toolkit = Toolkit.getDefaultToolkit();
clipboard = toolkit.getSystemClipboard();
}
}
Index.html
<html>
<title>The Hello, World Applet</title>
<hr>
<applet code="PasteImageApplet.class" width="320" height="120">
</hr>
</html>
你好,世界小程序
形象
在jar上签名,并将在剪贴簿中访问的主代码放入AccessController,如下所示
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
// perform the security-sensitive operation here
return null;
}
});
未签名的小程序无法访问系统剪贴板,因此请使用
javax.jnlp.ClipboardService
并创建jar/jnlp文件
PasteImageApplet.java
try {
ClipboardService cs =
(ClipboardService)ServiceManager.lookup("javax.jnlp.ClipboardService");
img = (Image)cs.getContents().getTransferData(DataFlavor.imageFlavor);
} catch (Exception ex) {
}
PasteImage.jnlp
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.6+" href="PasteImage.jnlp">
<information>
<title>Paste Image</title>
<vendor>ABC</vendor>
</information>
<resources>
<java version="1.6+"
href="http://java.sun.com/products/autodl/j2se" />
<jar href="PasteImage.jar" main="true"/>
</resources>
<applet-desc name="PasteImage"
main-class="PasteImageApplet"
width="320" height="120">
</applet-desc>
粘贴图像
基础知识
index.html
<applet width="320" height="120">
<param name="jnlp_href" value="PasteImage.jnlp" />
</applet>
尝试使用keytool对jar进行签名,并在java bin中使用jarsignerfolder@user571616你有任何参考链接吗?事实上,同一个问题出现了,但没有答案,但他写下了“获得成功”的标志,并将访问剪贴簿的主代码放在AccessControllerDon’t use
中的代码块中。对代码、输入/输出和结构化文档(如HTML或XML)使用代码格式。要执行此操作,请选择示例并单击消息发布/编辑表单上方的{}
按钮。还要注意的是,只有在特定情况下才需要AccessController
。