2012-03-18 2 views
0

Я использую инструкции, приведенные в http://code.google.com/appengine/articles/openid.html, чтобы включить федеративную аутентификацию в App Engine. Я не могу решить проблему «бесконечной рекурсии», упомянутую в инструкциях, может кто-то помочь мне понять, как я могу это решить.GAE/J - федеративная аутентификация и бесконечная рекурсия

мой web.xml выглядит следующим образом:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name></web-resource-name> 
     <url-pattern>/mylogin.jsp</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>*</role-name> 
    </auth-constraint> 
</security-constraint> 


<servlet> 
    <servlet-name>LoginRequiredServlet</servlet-name> 
    <servlet-class>com.jagdish.LoginRequiredServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>LoginRequiredServlet</servlet-name> 
    <url-pattern>/_ah/login_required</url-pattern> 
</servlet-mapping> 

Существует решение размещена на Google групп http://groups.google.com/group/google-appengine/browse_thread/thread/96c4248f5d289fba?pli=1, но я не в состоянии понять, как его реализовать.

мне нужно справиться с этим в web.xml путем удаления <url-pattern>/_ah/login_required</url-pattern>

Я попробовал, что он не работает, как я не в состоянии развернуть приложение Do.

Или мне нужно обработать в «LoginRequiredServlet» вот мой код LoginRequiredServlet.

import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.HashMap; 
import java.util.HashSet; 
import java.util.Map; 
import java.util.Set; 

import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import com.google.appengine.api.users.User; 
import com.google.appengine.api.users.UserService; 
import com.google.appengine.api.users.UserServiceFactory; 

@SuppressWarnings("serial") 
public class LoginRequiredServlet extends HttpServlet { 

    private static final Map<String, String> openIdProviders; 
    static { 
     openIdProviders = new HashMap<String, String>(); 
     openIdProviders.put("Google", "www.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>] "); 
      } 
     } 
    } 
} 

Пожалуйста, помогите мне решить эту проблему рекурсии, спасибо.

ответ

0

Это, как я могу решить эту проблему -

внутри LoginRequiredServlet.java Я проверка для

String returnURL = req.getParameter("continue"); 

я получить обратный адрес в Струнный ReturnUrl. Я ухаживаю за этим URL-адресом, а затем создаю

loginUrl = userService.createLoginURL(returnURL, null, providerUrl, attributes); 
Смежные вопросы