有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javagae/J联邦身份验证与无限递归

我正在使用http://code.google.com/appengine/articles/openid.html中提供的指令在App Engine中启用联合身份验证。我无法解决说明书中提到的“无限递归”问题,有人能帮我理解我如何解决这个问题吗

我的网络。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 groupshttp://groups.google.com/group/google-appengine/browse_thread/thread/96c4248f5d289fba?pli=1上发布了一个解决方案,但我不知道如何实现它

我需要在网络上处理这个问题吗。通过删除<url-pattern>/_ah/login_required</url-pattern>

我试过了,它不起作用,因为我无法部署应用程序

或者我需要在“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>] ");
            }
        }
    }
}

请帮我解决这个递归问题,谢谢


共 (1) 个答案

  1. # 1 楼答案

    我就是这样解决这个问题的

    内部登录需要Servlet。我在查java

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

    我以字符串returnURL获取返回URL。我创建了这个url,然后创建了

    loginUrl = userService.createLoginURL(returnURL, null, providerUrl, attributes);