Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.security.AccessControlException:拒绝访问(“java.net.SocketPermission”smtp.gmail.com“resolve”)_Java_Security_Applet_Japplet_Accesscontrolexception - Fatal编程技术网

java.security.AccessControlException:拒绝访问(“java.net.SocketPermission”smtp.gmail.com“resolve”)

java.security.AccessControlException:拒绝访问(“java.net.SocketPermission”smtp.gmail.com“resolve”),java,security,applet,japplet,accesscontrolexception,Java,Security,Applet,Japplet,Accesscontrolexception,我使用的是GlassFish服务器3.1和Java邮件Api 1.4.5 场景:我有一个小程序,点击它会发送一封电子邮件 “发送邮件”在Netbeans AppletViewer上运行得非常好,但当添加到浏览器并尝试从浏览器发送电子邮件时,它会变成地狱 我已经读了好几个小时了,关于策略文件、已签名/未签名的小程序等等 我尝试过使用签名小程序(有很多关于签名的教程,使用java的keytools非常简单)。当我在浏览器上运行它时,它会请求许可,因为它是一个自签名证书,我给了它许可,但它仍然会抛出相

我使用的是GlassFish服务器3.1和Java邮件Api 1.4.5

场景:我有一个小程序,点击它会发送一封电子邮件

“发送邮件”在Netbeans AppletViewer上运行得非常好,但当添加到浏览器并尝试从浏览器发送电子邮件时,它会变成地狱

我已经读了好几个小时了,关于策略文件、已签名/未签名的小程序等等

我尝试过使用签名小程序(有很多关于签名的教程,使用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();

有几件事需要注意:

1) 仔细检查并确保小程序签名正确:

2) 请看crossdomain.xml:

3) 看看applet.policy


您必须对小程序进行签名,以便它可以连接到加载它的主机以外的主机,并且您必须使用非自签名证书,或者用户必须在提示时接受证书。

JApplet自身处于“沙箱”中,与常规应用程序具有不同的权限(只有当用户选择直接执行应用程序时,应用程序才会执行,因此,用户接受后果)。当浏览器下载应用程序时,JApplet才会执行,用户没有任何选择,这就是为什么如果您想让他人部署和执行您的小程序(当小程序访问部署它的服务器以外的服务器时)必须对其进行签名(自签名证书或由授权组织签署的证书,通常意味着支付一些费用),以便用户能够“接受”使用所述小程序的后果,允许其“走出沙箱”


出于某种原因,使用keytols和jarsigner使用自认证对我来说根本不起作用。尽管当我访问网页时,浏览器警告我要执行applet(让我可以选择不执行它),我接受了警告,但JApplet似乎没有获得它的权限

我男朋友建议将email类移出“沙箱”。他解决了它(保佑他!),移动了email类(使用java mail api的类)对服务器没有任何问题。使用客户端服务器Arquitecture的Front Controller命令,我所要做的就是用我在问题开头发布的代码实现我的Controller类,并从我的applet发送(单击按钮时)带有toEmailAddress、subject和主体的http请求到我的servlet


工作完美。

使用带有签名的JNLP向您分发程序,非常简单,可以解决此类情况

查看有关IDE JNLP的教程,并阅读以下内容以了解更多信息:

您确定是小程序而不是GMail拒绝连接吗?绝对确定,因为它与AppletViewer配合使用(当您在NetBeans环境中而不是在浏览器中执行小程序时)效果良好。我已使用以下说明对小程序进行签名:keytool-genkey-keystore-keyalg rsa-dname“CN=Johanna Daniel,OU=Universidad,O=Universidad,L=Atlanta,ST=GA,C=NL”-别名aks-validity 3600-keypass password storepassword//jarsigner-keystore akystore-storepassword keypass password paswword-signedjar ArkanoidS.jar Arkanoid.jar aks我还使用了jarsigner的-verify选项来“验证”“我的ArkanoidS.jar已经签名了。就是这个罐子(签名的那个)我添加到我的Web应用程序和html标记中的。它仍然不起作用。@Joy,所以您满足了我列举的三个条件中的一个。我不知道哪些条件没有满足。您要求小程序使用非自签名证书或自签名证书签名(在最后一种情况下,即使小程序是由非授权实体签署的,也会提示用户接受执行小程序,这意味着它有一个自签署的证书)。我做了所有这些,当在浏览器上执行时,它会提示我,我接受了条款并告诉它执行。它不断出现相同的异常。嗨-我很高兴你解决了它:)。正如你所看到的,有两个问题:1)小程序需要“签名”,2)访问不是“跨域”使用keytols和jarsigner用自我证书签名对我也不起作用。我正在使用jre7。我正在尝试读取存储在桌面上的文件。我正在与JNLP启动的应用程序中的相同错误进行斗争。直接从JAR运行时工作正常,但启动JNLP时也会以同样的方式失败:-(你的应用程序必须用完沙箱才能访问更多资源,还有另一种方法可以实现这一点,但对于只接受签名的用户来说更烦人。