Bonjour,
Je suis en train d'écrire un applet qui copie les données depuis le clipboard.
Problème: Je n'ai pas la permission de lire directement dans le clipboard.
Tentative de solution: J'ai crée un jar et l'ai signé avec jarSigner:
PS C:\Program Files\Java\jdk1.6.0_20\bin> .\jarsigner.exe -verify -verbose -certs pasteButton.jar
213 Mon Apr 26 15:01:22 CEST 2010 META-INF/MANIFEST.MF
334 Mon Apr 26 15:01:22 CEST 2010 META-INF/MYCERT.SF
952 Mon Apr 26 15:01:22 CEST 2010 META-INF/MYCERT.RSA
0 Mon Apr 26 15:01:00 CEST 2010 META-INF/
smk 5038 Mon Apr 26 14:59:46 CEST 2010 pasteButton.class
X.509, CN=*****, OU=*****, O=****, L=Paris, ST=France, C=fr (mycert)
[certificate will expire on 25/07/10 14:36]
smk 829 Mon Apr 26 14:59:46 CEST 2010 pasteButton$1.class
X.509, CN=****, OU=****, O=****, L=Paris, ST=France, C=fr (mycert)
[certificate will expire on 25/07/10 14:36]
s = signature was verified
m = entry is listed in manifest
k = at least one certificate was found in keystore
i = at least one certificate was found in identity scope
jar verified.
Problème: J'ai toujours l'erreur suivante quand je tente d'exécuter l'applet dans mon navigateur:
Exception in thread "AWT-EventQueue-17" java.security.AccessControlException: access denied (java.awt.AWTPermission accessClipboard)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkSystemClipboardAccess(Unknown Source)
at sun.awt.windows.WToolkit.getSystemClipboard(Unknown Source)
at pasteButton.pasteClipboard(pasteButton.java:116)
at pasteButton.pasteData(pasteButton.java:28)
at pasteButton.paint(pasteButton.java:110)
at sun.awt.RepaintArea.paintComponent(Unknown Source)
at sun.awt.RepaintArea.paint(Unknown Source)
at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Même si l'applet est signé (par moi, je n'ai pas acheté de certificat officiel), a aucun moment il est demandé à l'utilisateur d'accepter la signature ou non.
J'ai essayé de faire:
Transferable t = (Transferable)AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
return Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
}
});
Ce qui ne change rien.
Pourquoi n'y a t-il pas de confirmation possible par l'utilisateur?
Comment faire pour copier du clipboard sans certificat officiel?
Merci beaucoup de voter attention.
La tortue.
Partager