gpt4 book ai didi

java - 使用 Oauth 和 Gdata 在 Java 中构建一个简单的应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:16:39 26 4
gpt4 key购买 nike

我正在尝试在用户登录的应用引擎上创建一个简单的应用通过他们的 Google 帐户,然后将事件添加到他们的日历。为此,我正在使用 Java 和 Eclipse。我找到了一个简单的在线代码:

public void doGet(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException {
// Create an instance of GoogleOAuthParameters
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
oauthParameters.setScope("http://docs.google.com/feeds/");
GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(
new OAuthHmacSha1Signer());
// Remember the token secret that we stashed? Let's get it back
// now. We need to add it to oauthParameters
String oauthTokenSecret = (String) req.getSession().getAttribute(
"oauthTokenSecret");
oauthParameters.setOAuthTokenSecret(oauthTokenSecret);
// The query string should contain the oauth token, so we can just
// pass the query string to our helper object to correctly
// parse and add the parameters to our instance of oauthParameters
oauthHelper.getOAuthParametersFromCallback(req.getQueryString(),
oauthParameters);
try {
// Now that we have all the OAuth parameters we need, we can
// generate an access token and access token secret. These
// are the values we want to keep around, as they are
// valid for all API calls in the future until a user revokes
// our access.
String accessToken = oauthHelper.getAccessToken(oauthParameters);
String accessTokenSecret = oauthParameters.getOAuthTokenSecret();
// In a real application, we want to redirect the user to a new
// servlet that makes API calls. For the safe of clarity and simplicity,
// we'll just reuse this servlet for making API calls.
oauthParameters = new GoogleOAuthParameters();
oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
// This is interesting: we set the OAuth token and the token secret
// to the values extracted by oauthHelper earlier. These values are
// already in scope in this example code, but they can be populated
// from reading from the datastore or some other persistence mechanism.
oauthParameters.setOAuthToken(accessToken);
oauthParameters.setOAuthTokenSecret(accessTokenSecret);
oauthParameters.setOAuthCallback("http://www.facebook.com");
oauthHelper.getUnauthorizedRequestToken(oauthParameters);
// Create an instance of the DocsService to make API calls
DocsService client = new DocsService("Malware Inc.");
// Use our newly built oauthParameters
client.setOAuthCredentials(oauthParameters, new OAuthHmacSha1Signer());
URL feedUrl = new URL("https://docs.google.com/feeds/default/private/full");
DocumentListFeed resultFeed = client.getFeed(feedUrl,
DocumentListFeed.class);
for (DocumentListEntry entry : resultFeed.getEntries()) {
resp.getWriter().println(entry.getTitle().getPlainText());
}
} catch (OAuthException e) {
// Something went wrong. Usually, you'll end up here if we have invalid
// oauth tokens
resp.getWriter().println("Here is the problem");
//Server shows 500 problem
} catch (ServiceException e) {
// Handle this exception
}
}

我已经注册了我的应用程序并添加了上面的 KEY 和 Secret函数,但是当我将它部署到应用程序引擎时,它给出了 500服务器错误。

有人可以发布一个使用 gdata 和 oauth 的简单 java 程序吗?登录 Google 用户并在屏幕上打印联系人?谢谢。-马诺杰

最佳答案

我遇到了同样的问题,我花了一段时间才弄明白。

实际上,问题是您在 OAuth 授权过程中遗漏了一些部分。

如您所知,这是一个三足过程:

  1. 获取未经授权的请求 token
  2. 授权请求 token
  3. 将授权请求 token 交换为访问 token ,并使用它调用 Google 数据。

在您的情况下,您正在直接执行第 3 步。

因此,在您可以调用上面描述的 servlet 并有效检索用户的 Google 数据之前,用户必须通过从他的网络浏览器浏览到授权 URL 来授予对您的应用程序的访问权限

您需要第一个 servlet ,例如可访问 http://yourapp.com/RequestAccess

        public void doGet(HttpServletRequest req, HttpServletResponse resp) {            

GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();

oauthParameters.setOAuthConsumerKey(YOUR_CONSUMER_KEY);
oauthParameters.setOAuthConsumerSecret(YOUR_CONSUMER_SECRET);
OAuthHmacSha1Signer signer = new OAuthHmacSha1Signer();

GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(signer);
oauthParameters.setScope(FEED_SCOPE);

try {
oauthHelper.getUnauthorizedRequestToken(oauthParameters);

//GET THE UNAUTHORIZED TOKENS
String oauthRequestToken = oauthParameters.getOAuthToken();
String oauthTokenSecret = oauthParameters.getOAuthTokenSecret();

//SAVE THEM SOMEWEHERE (FOR EXAMPLE IN THE SESSION LIKE YOU DID)

// ....

//GET THE AUHTORIZATION URL
String authorizationURL= oauthHelper.createUserAuthorizationUrl(oauthParameters);

// YOU NOW HAVE THE AUHTORIZATION URL, SEND IT BACK TO THE USER SOMEHOW
// ( FOR EXAMPLE BY REDIRECTING THE REQUEST TO THAT URL)

// ...
} catch (OAuthException e1) {
LOGGER.error("error while getting unauthorized request token '{}' ", e1);
}
}

一旦用户导航到该 URL 并授予访问权限,您现在可以调用您的第二个 servlet,它应该可以工作。

可以在 Google OAuth 页面上找到更多信息 here

希望对您有所帮助!

关于java - 使用 Oauth 和 Gdata 在 Java 中构建一个简单的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6304712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com