通过javamail邮件发送失败:java.lang.SecurityException: Access to default session denied
获取邮件发送者session的时候若采用了getDefaultInstance(properties, null)方法,就会报如下错误日志,而该方法获得一个默认的共享session,且是真正的单例模式,当存在两个不同的邮件发送者若使用这个方法,导致建立起同一个session,而另一个邮件发送者用那个这个session信息进行登录的时候就会被拒绝,所以如果需要多个邮件发送者,哪怕只是需要登录smtp服务都需要创建不同的session来支持多实例的发送,这个时候应该使用getInstance方法,例如:
Session session = Session.getDefaultInstance(properties, null); 单实例
Session session = Session.getInstance(properties, null); 多实例
多发送者场景下的单实例模式错误信息:
2015-01-30 06:18:39,279 INFO [STDOUT] ERROR: 15-01-30 06:18:39 java.lang.SecurityException: Access to default session denied
2015-01-30 06:18:39,280 INFO [STDOUT] ERROR: 15-01-30 06:18:39 at javax.mail.Session.getDefaultInstance(Session.java:316)
2015-01-30 06:18:39,280 INFO [STDOUT] ERROR: 15-01-30 06:18:39 at com.sinosoft.cms.mail.SimpleMailSender.sendHtmlMail(SimpleMailSender.java:150)
2015-01-30 06:18:39,280 INFO [STDOUT] ERROR: 15-01-30 06:18:39 at com.sinosoft.inter.MailAction.deal(MailAction.java:205)
2015-01-30 06:18:39,280 INFO [STDOUT] ERROR: 15-01-30 06:18:39 at com.sinosoft.inter.ActionUtil.deal(ActionUtil.java:217)
2015-01-30 06:18:39,280 INFO [STDOUT] ERROR: 15-01-30 06:18:39 at com.sinosoft.inter.TBSDAction.sendWarnMail(TBSDAction.java:132)
2015-01-30 06:18:39,280 INFO [STDOUT] ERROR: 15-01-30 06:18:39 at com.sinosoft.framework.servlets.TBContInsureServlet.dealInsureData(TBContInsureServlet.java:160)
2015-01-30 06:18:39,280 INFO [STDOUT] ERROR: 15-01-30 06:18:39 at com.sinosoft.framework.servlets.TBContInsureServlet.readXMLtoMap(TBContInsureServlet.java:105)
2015-01-30 06:18:39,280 INFO [STDOUT] ERROR: 15-01-30 06:18:39 at com.sinosoft.framework.servlets.TBContInsureServlet.doPost(TBContInsureServlet.java:81)
2015-01-30 06:18:39,280 INFO [STDOUT] ERROR: 15-01-30 06:18:39 at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
2015-01-30 06:18:39,280 INFO [STDOUT] ERROR: 15-01-30 06:18:39 at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
- 上一篇: 如何打造最安全的Nginx Web服务器
- 下一篇: jboss应用部署的多端口管理机制
评论