java - 小程序 - java.awt.awtpermission accessclipboard

标签 java html security applet accesscontrolexception

我创建了小程序来从剪贴板捕获图像。当我在 HTML 中运行小程序时,它会抛出 accesscontrolException 访问被拒绝 (java.awt.awtpermission accessclipboard)

PasteImageApplet.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();
    }
}

索引.html

<html>
<title>The Hello, World Applet</title>
<hr>
<applet code="PasteImageApplet.class" width="320" height="120">
</hr>
</html>

图片 enter image description here

最佳答案

对 jar 进行签名,并将访问剪贴板的主要代码放入 AccessController 中,如下所示

AccessController.doPrivileged(new PrivilegedAction() {
    public Object run() {
        // perform the security-sensitive operation here
        return null;
    }
});

关于java - 小程序 - java.awt.awtpermission accessclipboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17741875/

相关文章:

java - 如何使用 Java 中基于信号处理的机制将 JNI 崩溃捕获为异常

java - 枚举与 If-else

javascript - 如何使函数影响类中的所有内容,同时也考虑数据属性

jquery - 用图像映射显示 Div?

java - Java 8接口(interface)方法中不允许 “synchronized”是什么原因?

java - 响应http响应体的编码

html - 虚线表边框变为实线?

php - require_once(../../path/to/script.php) 无法打开流权限被拒绝

facebook - 设计一个安全的 "Low Cost"客户端游戏结果确认方法的思路

java - 如何以编程方式从 spring security 中的 <HTTP> 元素访问 <INTERCEPT-URL>