我们正在尝试使用Oauth2登录我们的应用程序和Google文档,但遇到了很多麻烦。
部署后,未登录的用户将重定向到Url: http://----.appspot.com/_ah/login_required?continue=http://------.appspot.com/oauth2
但该页面给出了错误:NOT_FOUND
我们已遵循此Google App Engine应用示例http://code.google.com/p/google-api-java-client/wiki/OAuth2,doGet如下所示:
try {
redirectUri = getRedirectUri(request);
response.sendRedirect(initializeFlow().newAuthorizationUrl().setRedirectUri(redirectUri).build());
} catch (ServletException e) {
Log.info("Redirect Error "+e.getLocalizedMessage());
e.printStackTrace();
}
我们在web.xml中的安全限制:
<security-constraint>
<web-resource-collection>
<url-pattern>/oauth2</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
我们也无法访问Google Docs API。 在devmode中,我们在请求权限时以及单击“允许访问”按钮后出现此错误:
HTTP错误404
访问/oauth2callback%3Fgwt.codesvr=127.0.0.1:9997时出现问题。原因是:
NOT_FOUND
这就是URL的样子:
http // 127.0.0.1:8888/oauth2callback%3Fgwt.codesvr=127.0.0.1:9997?code=4/g_fjsddhegiko4eifsdkl
getRedirectUri方法i Oauth2
protected String getRedirectUri(HttpServletRequest req) throws ServletException, IOException {
GenericUrl url = new GenericUrl(req.getRequestURL().toString());
String URL = "/oauth2callback";
if(req.getRequestURL().toString().contains("http://127.0.0.1:8888")) {
URL += Global.getLocalcodesvr();
}
url.setRawPath(URL);
return url.build();
}
我们已经注册了我们的应用以及devmode和部署所需的回调网址。 我们已经花了几天时间试图解决这些问题。