java.security.AccessControlException:访问被拒绝(“java.net.
我正在使用GlassFish Server 3.1和
Java邮件Api 1.4.5.
场景:我有一个小程序,单击它时会发送一封电子邮件. 发送邮件在Netbeans AppletViewer上完美运行,但是当它被添加到浏览器并尝试从那里发送电子邮件时它会变成地狱. 我已经阅读了几个小时,关于策略文件,签名/未签名的小程序等等. 我已经尝试使用签名的applet(有很多教程用于签名,使用java中的keytools非常简单).当我在浏览器上运行它时,它要求许可,因为它是一个自签名证书,我给它许可,但它仍然会吐出相同的异常. 我也试过修改java.poilcy文件添加 权限java.net.SocketPermission“smtp.gmail.com:587”,“听,解决”; 但没什么. 我知道这是异常,因为我在Java控制面板中激活了Java控制台.我真的不知道还能做什么. 以下是发送电子邮件的代码: 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(); 解决方法
JApplet在它自己的“沙盒”中,给予与常规应用程序不同的权限(应用程序仅在用户选择直接执行时执行,因此,用户接受后果). JApplet在浏览器下载时执行,给用户没有任何选项,这就是为什么如果你想让你的applet部署和执行applet(当applet访问服务器而不是部署服务器的服务器时)签名(自签名证书或授权组织签署的证书,通常意味着支付一些费用),以便用户可以“接受”使用所述Applet的后果,允许它“脱离沙箱”.
出于某种原因,使用keytolls和jarsigner使用自我证书进行签名对我来说无效.即使当我访问网页并且浏览器警告我执行applet(给我选项不执行它)并且我接受了警告时,似乎JApplet没有获得它的权限. 我的男朋友建议将电子邮件类移出“沙盒”.他解决了它(祝福他!),将emailClass(使用java邮件api的那个)移动到服务器没有任何问题.使用前端控制器命令进行客户端 – 服务器Arquitecture,我所要做的就是使用我在问题开头发布的代码实现我的Controller类,并从我的applet发送(当点击按钮时)一个http请求使用toEmailAddress,subject和body到我的servlet. 工作完美. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |