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>
이 구글 그룹 http://groups.google.com/group/google-appengine/browse_thread/thread/96c4248f5d289fba?pli=1에 게시 된 솔루션입니다하지만 난 그것을 구현하는 방법을 이해할 수 없습니다입니다.
내가 내가 내가 응용 프로그램을 배포 할 수 없습니다 나는대로 작동하지 않는 것을 시도<url-pattern>/_ah/login_required</url-pattern>
를 제거하여 web.xml 파일이 처리해야합니까.
또는 "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>] ");
}
}
}
}
이 재귀 문제를 해결하는 데 협조 해 주시기 바랍니다. 감사합니다.
가 LoginRequiredServlet.java 내부 내가 내가 문자열 returnURL의 반환 URL을 얻을
String returnURL = req.getParameter("continue");
확인하고 -