Использование открытого идентификатора с механизмом приложений Google

У меня есть приложение, работающее на движке приложений Google. Я хочу изменить вход с помощью Google на использование открытого идентификатора в Java.

Итак, я попытался следовать этому руководству:

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. Я передислоцировался. При переходе на мою целевую страницу мне требуется только страница входа в Google. Что именно мне нужно сделать, чтобы он мог показать несколько ссылок на других провайдеров OpenID?

Что мне не хватает?

Спасибо.


person solur    schedule 24.12.2010    source источник
comment
Привет, были идеи? Спасибо.   -  person solur    schedule 28.12.2010


Ответы (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-адреса на веб-сайте.

person ncho    schedule 28.12.2010