2

在 Java SE 中,使用这样的代码很容易支持身份验证部分:

Session session = session.getInstance(props,new MyAuthenticator());

但是在 Java EE 中,会话实例不是由应用程序创建的,而是由应用程序服务器中的 JNDI 注入提供的。

@Resource(name = "mail/JMsession")
private Session session

这里如何处理认证部分?@Resource 注解中的 authenticationType 参数呢?

@Resource(name = "mail/JMsession", authenticationType = AuthenticationType.APPLICATION)  
4

2 回答 2

1

通常在 Java EE 中,您应该在与容器提供的会话的其他属性相同的位置配置身份验证。例如,对于 Glassfish,可以在 Admin UI / Resources / JavaMail Sessions 中找到此配置。所以,Authenticator 一般只适用于 SE 风格:

Session session = session.getInstance(props,new MyAuthenticator());

Java EE 基于配置的方法将您限制为固定数量的预配置会话。然而,这对大多数应用程序来说是有意义的,因为它们通常通过固定的邮件中继服务器发送邮件。

于 2013-09-16T19:19:04.613 回答
1

在 Java EE 中,您可以使用@MailSessionDefinition注释(或 XML 中的等效注释)来定义稍后注入的邮件会话。

userpassword属性是程序化AuthenticatorPasswordAuthentication的声明版本。

@MailSessionDefinition可在 Java EE 7 服务器上使用,例如 GlassFish 4,也已在 WildFly 8(以前的 JBoss AS 8)中可用。

于 2013-09-18T12:55:50.793 回答