【问题标题】:Using open ID with Google app engine将开放 ID 与 Google 应用引擎一起使用
【发布时间】:2010-12-24 20:30:53
【问题描述】:
我有一个在 Google 应用引擎上运行的应用。我想在 Java 中将登录从使用 google 更改为使用 open id。
所以,我尝试按照本指南进行操作:
http://code.google.com/appengine/articles/openid.html
我在应用程序设置仪表板上将身份验证更改为联合登录。
-
我把这个放在 web.xml 中:
<servlet>
<servlet-name>LoginRequiredServlet</servlet-name>
<servlet-class>XXXXXX.server.LoginRequiredServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginRequiredServlet</servlet-name>
<url-pattern>/_ah/login_required</url-pattern>
</servlet-mapping>
我使用上面链接中的代码创建了一个名为 LoginRequiredServlet 的类。我将他们的类 OpenIdDemoServlet 重命名为 LoginRequiredServlet。
我重新部署了。进入我的登陆页面后,我只需要一个谷歌登录页面。我需要做什么才能显示一些指向其他 OpenID 提供者的链接?
我错过了什么?
谢谢。
【问题讨论】:
标签:
java
login
openid
federated
【解决方案1】:
试试这个,我引用http://code.google.com/appengine/articles/openid.html 只是我已将类名从 OpenIdDemoServlet 更改为 LoginRequiredServlet。
@SuppressWarnings("serial")
公共类 LoginRequiredServlet 扩展 HttpServlet {
private static final Map<String, String> openIdProviders;
static {
openIdProviders = new HashMap<String, String>();
openIdProviders.put("Google", "google.com/accounts/o8/id");
openIdProviders.put("Yahoo", "yahoo.com");
openIdProviders.put("MySpace", "myspace.com");
openIdProviders.put("AOL", "aol.com");
openIdProviders.put("MyOpenId.com", "myopenid.com");
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser(); // or req.getUserPrincipal()
Set<String> attributes = new HashSet();
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
if (user != null) {
out.println("Hello <i>" + user.getNickname() + "</i>!");
out.println("[<a href=\""
+ userService.createLogoutURL(req.getRequestURI())
+ "\">sign out</a>]");
} else {
out.println("Hello world! Sign in at: ");
for (String providerName : openIdProviders.keySet()) {
String providerUrl = openIdProviders.get(providerName);
String loginUrl = userService.createLoginURL(req
.getRequestURI(), null, providerUrl, attributes);
out.println("[<a href=\"" + loginUrl + "\">" + providerName + "</a>] ");
}
}
}
}
同时更新您的 web.xml 以强制登录。下面的代码将强制登录
网站上的所有网址。