简体   繁体   English

Appletviewer未从命令提示符运行:java.security.AccessControlException:访问被拒绝(java.net.SocketPermission smtp.gmail.com resolve)

[英]Appletviewer not running from command prompt: java.security.AccessControlException: access denied (java.net.SocketPermission smtp.gmail.com resolve)

I have a created a simple applet which sends mail by using smtp.gmail.com on clicking a button "Send Mail". 我有一个创建了一个简单的小程序,它通过点击“发送邮件”按钮使用smtp.gmail.com发送邮件。 It runs perfectly from Eclipse. 它完全从Eclipse运行。 From eclipse I Run it as Java Applet and it sends mail without any error. 从eclipse我运行它作为Java Applet,它发送邮件没有任何错误。
But when run from the appletviewer, outside the eclipse it throws an error: java.security.AccessControlException: access denied (java.net.SocketPermission smtp.gmail.com resolve) 但是当从appletviewer运行时,在eclipse之外会抛出一个错误: java.security.AccessControlException:access denied(java.net.SocketPermission smtp.gmail.com resolve)
I have signed the JAR of my program. 我已经签署了我的计划的JAR。 After signing, it sends the mail if applet is run from Internet Explorer but throws the above error if applet is run from Google Chrome browser or appletviewer. 签名后,如果从Internet Explorer运行applet,则会发送邮件,但如果从Google Chrome浏览器或appletviewer运行applet,则会抛出上述错误。

Command to make a keystore: "c:\\Program Files\\Java\\jre6\\bin\\keytool.exe" -genkey -alias -validity 365 -keystore -keyalg rsa 创建密钥库的命令:“c:\\ Program Files \\ Java \\ jre6 \\ bin \\ keytool.exe”-genkey -alias -validity 365 -keystore -keyalg rsa

Command to sign the jar: \\bin\\jarsigner.exe -signedjar -keystore 用于对jar进行签名的命令:\\ bin \\ jarsigner.exe -signedjar -keystore

JAR was formed by exporting the same from Eclipse only. JAR是通过仅从Eclipse导出JAR而形成的。

Command to run the applet: "c:\\Program Files\\Java\\jdk1.6.0_27\\bin\\appletviewer.exe" 运行applet的命令:“c:\\ Program Files \\ Java \\ jdk1.6.0_27 \\ bin \\ appletviewer.exe”

Please have a look into code and let me know where I am doing wrong... 请查看代码,让我知道我在哪里做错了...

Code for applet 小程序代码

package in.appletmail;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class SendMailApplet extends JApplet
{
    boolean isStandalone = false;
    JPanel jPanel1 = new JPanel();
    JTextField jTextField1 = new JTextField();
    JButton jButton = new JButton("Send Mail");
    GridBagLayout gridBagLayout1 = new GridBagLayout();

    // Construct the applet
    public SendMailApplet()
    {
        // TODO Auto-generated constructor stub
    }

    // Initialize the applet
    public void init()
    {
        try
        {
            jbInit();
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    // Initializing the components
    private void jbInit() throws Exception
    {
        this.setSize(new Dimension(500, 200));
        jPanel1.setLayout(gridBagLayout1);

        jTextField1.setText("First Applet");
        this.getContentPane().add(jPanel1, BorderLayout.CENTER);
        jPanel1.add(jTextField1, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0,
                GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
                new Insets(140, 128, 139, 132), 77, 0));

        jPanel1.add(jButton, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0,
                GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
                new Insets(140, 128, 200, 132), 77, 0));


        final String mailStatus = "Testing Applet Viewer";
        jTextField1.setText(mailStatus);

        jButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                try
                {
                    SendMail.mailVariable("Test mail from applet");
                    jTextField1.setText("Mail Send");
                } catch (Exception e1)
                {
                    jTextField1.setText(e1.toString());
                }

            }
        });
        // jTextField1.setText("Mail Send");
    }

    // Start the applet
    public void start()
    {

    }

    // Stop the applet
    public void stop()
    {

    }

    // Delete the applet
    public void destroy()
    {

    }

    // Fetch applet information
    public String getAppletInfo()
    {
        return "Applet-Information";
    }
}

Code to Send Mail 代码发送邮件

package in.appletmail;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public final class SendMail
{
    private static final String SMTP_HOST_NAME = "smtp.gmail.com";
    private static final String SMTP_PORT = "587";
    private static final String SMTP_AUTH_USER = "username";
    private static final String SMTP_AUTH_PWD = "pass";

    private static final String emailMsgTxt = "Testing mail from Applet, Test again";
    private static final String emailSubjectTxt = "Test mail from Applet via Google";
    private static final String emailFromAddress = "test.mail@abc.in";

    // Add List of Email address to who email needs to be sent to
    private static final String[] emailList = { "To@gmail.com" };

    public static String testFunctionCall()
    {
        return "Mailing function will be called";
    }

    public static String mailVariable(String variableValue)
            throws MessagingException
    {
        SendMail smtpMailSender = new SendMail();
        return smtpMailSender.postMail(emailList, emailSubjectTxt, emailMsgTxt
                + "\n variable value:  " + variableValue, emailFromAddress);
    }

    public String postMail(String recipients[], String subject, String message,
            String from) throws MessagingException
    {
        StringBuffer status = new StringBuffer();
        boolean debug = false;

        // Set the host smtp address
        Properties props = new Properties();
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", SMTP_HOST_NAME);
        props.put("mail.smtp.port", SMTP_PORT);
        props.put("mail.smtp.auth", "true");

        Authenticator auth = new SMTPAuthenticator();
        Session session = Session.getDefaultInstance(props, auth);

        session.setDebug(debug);
        status.append("Session set;");
        // create a message
        Message msg = new MimeMessage(session);

        // set the from and to address
        InternetAddress addressFrom = new InternetAddress(from);
        msg.setFrom(addressFrom);

        InternetAddress[] addressTo = new InternetAddress[recipients.length];
        for (int i = 0; i < recipients.length; i++)
        {
            addressTo[i] = new InternetAddress(recipients[i]);
        }
        msg.setRecipients(Message.RecipientType.TO, addressTo);
        status.append("Recipients set;");

        // Setting the Subject and Content Type
        msg.setSubject(subject);
        msg.setContent(message, "text/plain");
        status.append("Subject and Content set;");
        Transport.send(msg);
        status.append("Mail send;");
        return status.toString();
    }

    /**
     * SimpleAuthenticator is used to do simple authentication when the SMTP
     * server requires it.
     */
    private class SMTPAuthenticator extends Authenticator
    {

        public PasswordAuthentication getPasswordAuthentication()
        {
            String username = SMTP_AUTH_USER;
            String password = SMTP_AUTH_PWD;
            return new PasswordAuthentication(username, password);
        }
    }
}

HTML to call the applet: 用于调用applet的HTML:

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>ABC</title>
</head>
<body bgcolor="#CCCCCC">

<table border="0" cellpadding="0" cellspacing="0" width="144" >
  <tr>
    <td width="10%" height="25" style= "height:25">Powered by Xpace :)
    </td>
    <td width="90%"style= "height:25">
    <APPLET CODEBASE="E:\Gunjan\Workspace\TestAppletExecution\Signed\"
        ARCHIVE="TestApplet.jar, mail.jar"
        CODE="in.appletmail.SendMailApplet.class"
        NAME="Send Mail"
        MAYSCRIPT
        WIDTH="750"
        HEIGHT="350"
        HSPACE="0" VSPACE="0" ALIGN="top">        
    </APPLET>
    </td>
  </tr>
</table>
</body>


</html>

Applet在沙箱中运行,但有一些限制,您必须配置文件jre / lib / security / java.policy添加以下行:

permission java.net.SocketPermission "smtp.gmail.com:587", "listen,resolve";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.security.AccessControlException:访问被拒绝(“java.net.SocketPermission”“smtp.gmail.com”“resolve”) - java.security.AccessControlException: access denied (“java.net.SocketPermission” “smtp.gmail.com” “resolve”) java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:8081 connect,resolve) - 主要原因 - java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:8081 connect,resolve) - main reasons java.security.AccessControlException:拒绝访问(“java.net.SocketPermission”“localhost:1527”“listen,resolve”) - java.security.AccessControlException: access denied (“java.net.SocketPermission” “localhost:1527” “listen,resolve”) java.security.AccessControlException:拒绝访问(“java.net.SocketPermission”“localhost:10648”“listen,resolve”) - java.security.AccessControlException: access denied (“java.net.SocketPermission” “localhost:10648” “listen,resolve”) Java RMI:异常:java.security.AccessControlException:访问被拒绝(“ java.net.SocketPermission”“ 127.0.0.1:1099”“ connect,resolve”) - Java RMI: exception: java.security.AccessControlException: access denied (“java.net.SocketPermission” “127.0.0.1:1099” “connect,resolve”) “ java.security.AccessControlException:访问被拒绝(“ java.net.SocketPermission”“ www.google.fr:80“” connect,resolve“)” - “java.security.AccessControlException: access denied (”java.net.SocketPermission“ ”www.google.fr:80“ ”connect,resolve“)” RMI服务器拒绝启动:java.security.AccessControlException:访问被拒绝(“ java.net.SocketPermission”“ 127.0.0.1:1099”“ connect,resolve”) - RMI Server refuses to start: java.security.AccessControlException: access denied (“java.net.SocketPermission” “127.0.0.1:1099” “connect,resolve”) 为什么我的applet得到java.security.AccessControlException:访问被拒绝(java.net.SocketPermission ...),我该如何避免它? - Why does my applet get a java.security.AccessControlException: access denied (java.net.SocketPermission …), and how can I avoid it? 访问被拒绝(java.net.SocketPermission 127.0.0.1:8080 connect,resolve) - access denied (java.net.SocketPermission 127.0.0.1:8080 connect,resolve) 如何解决 Exception::java.security.AccessControlException: access denied in HttpServlet - How to resolve Exception::java.security.AccessControlException: access denied in HttpServlet
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM