java.de sécurité.AccessControlException: accès refusé (“java.net.SocketPermission” “smtp.gmail.com” “résoudre”)
Je suis en utilisant Serveur GlassFish 3.1 et la Java mail Api 1.4.5.
Scénario: j'ai une applet, que lorsque l'utilisateur clique dessus, il envoie un message e-mail.
Envoyer l'e-mail fonctionne parfaitement sur Netbeans AppletViewer, mais il se transforme en enfer lorsqu'il est ajouté au navigateur et essayez d'envoyer le courriel à partir de là.
J'ai lu pendant des heures, à propos de la politique de fichiers, signé/non signé applets...etc.
J'ai essayé d'utiliser l'applet signée (beaucoup de tutoriels pour la signature, elle, était assez simple en utilisant la keytools de java). Lorsque je l'exécute sur le navigateur, il demande la permission parce que c'est un certificat auto-signé, je lui donne la permission , mais encore, elle crache de la même exception.
J'ai aussi essayé de modifier java.poilcy fichier ajoutant
permission java.net.SocketPermission "smtp.de gmail.com:587", "écouter,à les résoudre";
Mais rien.
Je sais que c'est une exception parce que je activaded la Console Java dans le Panneau de configuration Java. Je ne sais pas vraiment quoi faire d'autre.
Voici le code qui envoie l'e-mail:
String host = "smtp.gmail.com";
String from = *****;
String pass = ******;
Properties props = new Properties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props, null);
this.message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
InternetAddress toAddress = new InternetAddress(this.to);
this.message.addRecipient(Message.RecipientType.TO, toAddress);
this.message.setSubject(this.subject);
this.message.setText(this.body);
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(this.message, this.message.getAllRecipients());
transport.close();
Absolument sûr, car il fonctionne très bien avec l'AppletViewer (lorsque vous exécutez l'applet dans NetBeans environnement plutôt que dans le navigateur)
OriginalL'auteur Chayemor | 2012-12-10
Vous devez vous connecter pour publier un commentaire.
JApplet est dans un "bac à sable", c'est propre, compte tenu des différentes autorisations que les demandes sont exécutés uniquement lorsque l'utilisateur choisit directement de le faire, par conséquent, l'utilisateur accepte les conséquences). Une JApplet s'exécute lorsqu'un navigateur télécharge, donnant à l'utilisateur aucune option que ce soit, c'est pourquoi si vous voulez avoir votre applet déployées et exécutées par d'autres (lorsque l'applet accède à des serveurs autres que celle à partir de laquelle il est déployé) il doit être signé (soit un certificat auto-signé ou un certificat signé par une personne autorisée de l'organisation, ce qui implique généralement payer certains frais), de sorte que l'utilisateur peut "Accepter" les conséquences de l'utilisation de l'Applet, lui permettant de "sortir de la sandbox".
Pour une raison quelconque, la signature avec un auto-cert à l'aide de keytolls et jarsigner ne fonctionne pas pour moi que ce soit. Même si, quand j'ai eu accès à la page web et le navigateur m'a mis en garde au sujet de l'exécution de l'applet (me donner la possibilité de ne pas exécuter) et j'ai accepté dit d'avertissement, il semblait que le JApplet n'a pas obtenir de ses autorisations.
Mon petit ami a suggéré de passer à l'e-mail de classe de la "sandbox". Il a résolu le (que dieu le bénisse!), le déplacement de la emailClass (celui qui utilise le java mail api) pour le server a donné aucun problème. En utilisant le Contrôleur Frontal de Commande pour le Client-Serveur, Architecture, tout ce que j'avais à faire était de mettre en œuvre ma classe de Contrôleur avec le code que j'ai posté au début de la question, et envoyer de mon applet (lorsque le bouton a été cliqué) un http-request avec le toEmailAddress, l'objet et le corps de ma servlet.
Fonctionne parfaitement.
la signature avec un auto-cert à l'aide de keytolls et jarsigner ne fonctionne pas pour moi non plus. Je suis à l'aide de jre7. Je suis en train de lire un fichier stocké dans le bureau.
OriginalL'auteur Chayemor
Vous devez signer l'applet de sorte qu'il peut se connecter à un hôte autre que celui qu'il a été chargé, et vous devez utiliser un non-auto-signé-certificat ou l'utilisateur doit accepter le certificat lorsque vous y êtes invité.
Donc, vous avez satisfait à l'une des trois conditions que j'ai énumérés.
Je ne comprends pas ce que les conditions de wherent remplies. Vous avez demandé l'applet doit être signé avec un non-auto-signé ou un certificat auto-signé-un (dans ce dernier cas, l'utilisateur sera invité à accepter pour exécuter l'applet, même si elle a été signée par un non-autorisé de l'entité, du sens qu'il a un certificat auto-signé). J'ai fait tout cela, lorsqu'il est exécuté sur le navigateur, j'ai été invité par elle, et j'ai accepté les termes et il a dit à l'exécuter. Elle a gardé de faire le même exception.
OriginalL'auteur user207421
Plusieurs choses à regarder:
1) vérifiez et assurez-vous que votre applet de signature est correcte:
2) Regardez crossdomain.xml:
3) Regardez l'applet.la politique
OriginalL'auteur paulsm4
Distribuer votre programme avec JNLP avec la signature, c'est facile et résoudre ce genre de situations.
Vérifier des tutoriels à propos de JNLP de votre IDE et de lire ceci pour plus d'info:
http://docs.oracle.com/javase/6/docs/technotes/guides/jweb/deployment_advice.html
Votre application doit être exécuté sur le bac à sable pour accéder à plus de ressources, et il y a une autre façon de l'atteindre trop, mais c'est plus gênant pour l'utilisateur qui vient d'accepter une signature.
OriginalL'auteur Daniel De León