起因:最近使用JavaMail发送邮件,WEB容器我用的是resin,在做邮件发送测试的时候,第一次成功发送邮件,然后我有进行了热部署。应用自动重启后,我再次进行测试。结果异常出来了:
{exception=java.lang.SecurityException: Access to default session denied}
java.lang.SecurityException: Access to default session denied
at javax.mail.Session.getDefaultInstance(Session.java:321)
......
原先使用的代码如下:
Session session = Session.getDefaultInstance(properties, new Authenticator(){
@Override
public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(USERNAME, PASSWORD);
}
});
后来把代码修改为:
Session session = Session.getInstance(properties, new Authenticator(){
@Override
public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(USERNAME, PASSWORD);
}
});
再次试验,发现不报异常了。
原因:Session.getDefaultInstance()是获得一个默认的共享session,而创建一个session可以使用Session.getInstance()。