2

我有一个在 Google 应用引擎上运行的应用。我想在 Java 中将登录从使用 google 更改为使用 open id。

因此,我尝试遵循本指南:

http://code.google.com/appengine/articles/openid.html

  1. 我在应用程序设置仪表板上将身份验证更改为联合登录。

  2. 我把它放在 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>
    
  3. 我使用上面链接中的代码创建了一个名为 LoginRequiredServlet 的类。我将他们的类 OpenIdDemoServlet 重命名为 LoginRequiredServlet。

  4. 我重新部署。进入我的登陆页面后,​​我只需要一个谷歌登录页面。我到底需要做什么才能显示一些指向其他 OpenID 提供者的链接?

我错过了什么?

谢谢。

4

1 回答 1

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 以强制登录。下面的代码将强制登录网站上的所有 url。

于 2010-12-28T20:13:52.890 回答