[英]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.