在 Java 中使用 Google 帐户

 

您可以通过请求对象的 getUserPrincipal() 方法测试用户是否使用 Google 帐户登录,并获得使用标准 servlet API 的用户电子邮件地址。您可以使用用户服务 API 来生成登录和退出网址。

 

 

import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;

public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
UserService userService = UserServiceFactory.getUserService();

String thisURL = request.getRequestURI();
if (request.getUserPrincipal() != null) {
response.getWriter().println("<p>Hello, " +
request.getUserPrincipal().getName() +
"! You can <a href=\"" +
userService.createLogoutURL(thisURL) +
"\">sign out</a>.</p>");
} else {
response.getWriter().println("<p>Please <a href=\"" +
userService.createLoginURL(thisURL) +
"\">sign in</a>.</p>");
}
}
}

 



使用 web.xml 强制登录和管理访问:

如果有的页面用户不登录就无法访问,那么您可以在部署描述符(web.xml 文件)中为这些页面建立一个安全约束。如果用户通过安全约束访问网址,且用户没有登录,那么 App Engine 会自动将用户重定向到 Google 帐户登录页面,然后在成功登录或注册后将用户引导回该网址。

 

安全约束也可以要求用户是应用程序的注册管理员。这样易于实现网站的仅管理员部分,而不必实现一个单独的授权机制。

 

Mail服务:

Sending Mail with the JavaMail API:

邮件服务 Java API 支持用 JavaMail (javax.mail) 接口来发送电子邮件。

创建 JavaMail 会话时,您无需提供任何 SMTP 服务器配置。App Engine 将始终使用邮件服务来发送电子邮件。

 

为了发送电子邮件,应用程序将准备一个 MimeMessage 对象,然后用 Transport 类上的 send() 方法发送该对象。使用 JavaMail Session 对象创建消息。无需任何其他配置,Session 和 Transport 即可用于 App Engine 邮件服务。对邮件服务的调用是异步的,且立即返回。邮件服务对联系收件人邮件服务器和传递消息的进程进行管理。如果在将消息发送到任意收件人时发生问题,或者如果收件人的邮件服务器返回“退回”消息,那么发件人将收到错误消息。

 

MimeMessage 对象上的几种方法确立了收件人。addRecipient() 方法取收件人类型和地址,并将其添加到该类型的收件人列表。收件人类型可以是 Message.RecipientType.TO、Message.RecipientType.CC 或 Message.RecipientType.BCC 中的任意一种。

 

import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

// ...
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);

String msgBody = "...";

try {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("admin@example.com", "Example.com Admin"));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress("user@example.com", "Mr. User"));
msg.setSubject("Your Example.com account has been activated");
msg.setText(msgBody);
Transport.send(msg);

} catch (AddressException e) {
// ...
} catch (MessagingException e) {
// ...
}

 

 

附件:



电子邮件可以没有文件附件,或有多个文件附件。

附件具有文件名和文件数据。文件数据可以来自任何来源,如应用程序数据文件或数据存储区。MIME 类型的附件取决于文件名。

 

import javax.mail.MimeBodyPart;
import javax.mail.MimeMultipart;
import javax.mail.Multipart;
import javax.activation.DataHandler;

// ...
        String htmlBody;        // ...
        byte[] attachmentData;  // ...

        Multipart mp = new MimeMultipart();

        MimeBodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent(htmlBody, "text/html");
        mp.addBodyPart(htmlPart);

        MimeBodyPart attachment = new MimeBodyPart();
        attachment.setFileName("manual.pdf");
        attachment.setContent(attachmentData, "application/pdf");
        mp.addBodyPart(attachment);

        message.setContent(mp);

 

应用程序调用邮件服务来发送邮件时,邮件即进行排队,且调用立即返回。邮件服务使用标准程序与每个收件人的邮件服务器进行联系、发送邮件并在邮件服务器无法联系时重试。

 

如果邮件服务不能发送邮件,或者如果收件人的邮件服务器发送退信通知(例如,如果系统上不存在该地址的帐户),则将通过电子邮件向该邮件的发件人地址发送错误消息。应用程序本身不会收到关于发送是成功还是失败的任何通知。

 

接收邮件:

首先在appengine-web.xml中增加:

 

<inbound-services>
<service>mail</service>
</inbound-services>

 

 

然后在web.xml中增加一个处理邮件接收的handler:

 

<servlet>
<servlet-name>mailhandler</servlet-name>
<servlet-class>MailHandlerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mailhandler</servlet-name>
<url-pattern>/_ah/mail/*</url-pattern>
<servlet-mapping>
<security-constraint>
<web-resource-collection>
<url-pattern>/_ah/mail/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>

 

 

处理程序:

 

import java.io.IOException; 
import java.util.Properties;
import javax.mail.Session;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.*;

public class MailHandlerServlet extends HttpServlet {
public void doPost(HttpServletRequest req,
HttpServletResponse resp)
throws IOException {
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
MimeMessage message = new MimeMessage(session, req.getInputStream());

 

posted on 2010-12-23 00:35  菊次郎  阅读(490)  评论(0)    收藏  举报