java.Sicherheit.AccessControlException bei der Verwendung von java.das awt.Roboter-Klasse für screen-capture-applet
Ich verlangen zum erfassen einer web-Seite Bildschirm, um es zu speichern auf der client Maschine bei Kunde klickt print screen-Taste. Für diese habe ich gegoogelt und bekam, dass durch die Einbettung eines Applets mit Unterschrift(trusted applet) in meiner jsp-Seite kann ich dies tun. So versuche ich mit einem einfachen applet für eine standalone-java-Klasse. Auf Erfolg kann ich versuchen es für jsp-Datei nach der Signierung des Applets.
Was ich versucht habe ist:
import java.applet.Applet;
import java.awt.Graphics;
import java.util.Date;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
/* <applet code = MyApplet.class width="500" height="500">Java Applet for screen capture</applet> */
public class MyApplet extends Applet {
/* Applet Life cycle Methods */
public void start()
{
try{
//capture the whole screen
BufferedImage screencapture = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) );
//Save as JPEG
File file = new File("D:/screencapture.jpg");
ImageIO.write(screencapture, "jpg", file);
System.out.println("screen capture finished : ");
}//try closing...
catch(Exception e)
{
System.out.println("screen capture error : ");
e.printStackTrace();
}//catch closing...
}//start closing...
public void stop()
{
}
}
Bin ich immer dies:
java.security.AccessControlException: access denied ("java.awt.AWTPermission" "createRobot")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366)
at java.security.AccessController.checkPermission(AccessController.java:560)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.awt.Robot.checkRobotAllowed(Robot.java:170)
at java.awt.Robot.init(Robot.java:134)
at java.awt.Robot.<init>(Robot.java:96)
at MyApplet.start(MyApplet.java:23)
at sun.applet.AppletPanel.run(AppletPanel.java:474)
at java.lang.Thread.run(Thread.java:722)
Jede Hilfe, Jede Idee wird sein appriciated.
Du musst angemeldet sein, um einen Kommentar abzugeben.
ich weiß, ich bin zu Graben, bis ein Dinosaurier-ein Jahr nach dem problem, aber ich habe vor dem gleichen problem. als jemand sagte, ändern der policy-Datei ist eine sehr schlechte Idee (auch unbequem für einige Benutzer, und wie in meinem Fall, völlig inakzeptable Lösung).
Ich habe vor dem gleichen problem signiertes applet mit gültigen mannifest. das problem war in den Weg, ich rief die Sicherheit der betreffenden Methode. Sie sollten in diesem Fall ersetzen Sie die Zeile:
mit
ist sauber Weg, es zu tun. in appled signiert mit gültigen certyficate, mit der richtigen security-Eintrag in mannifest und jnpl Datei funktioniert es perfekt.
Ich dieses problem gelöst.
Alle habe ich nur eingefügt, diese Zeilen in java.policy-Datei(suchen Sie einfach diese Datei in Ihre java-installation Ordner und Sie erhalten es in 3 Orten und müssen, fügen Sie diese endlich in allen Dateien)
Robot
.