我正在尝试将使用 Twitter 登录的功能添加到我的网站,但我无法让它工作。我正在使用 twitter4j api。在 twitter4j 站点中,他们有一个示例代码准确地演示了登录工作流程。我尝试使用此代码,但它在一个特定步骤中不起作用(至少对我而言)!
我有一个 LoginServlet,它重定向到用户授予对我的应用程序访问权限的 twitter 验证页面。这是 doGet 代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
TwitterFactory twitterFac = new TwitterFactory();
Twitter twitter = twitterFac.getInstance();
twitter.setOAuthConsumer("<consumer_key>", "<consumer_secret>");
request.getSession().setAttribute("twitter", twitter);
try {
RequestToken requestToken = twitter.getOAuthRequestToken("http://127.0.0.1:8080/AllMusicWeb/CallbackServlet");
request.getSession().setAttribute("requestToken", requestToken);
response.sendRedirect(requestToken.getAuthenticationURL());
} catch (TwitterException e) {
throw new ServletException(e);
}
}
如您所见,twitter 对象和请求令牌保存在 http 数据包中(至少我认为那些 getSession.setAttribute 方法是这样做的)。
然后 twitter 页面重定向到我的应用程序 (CallbackServlet) 的页面。所有这些都正确执行。
那么 CallbackServlet 有如下的 doGet 方法:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Twitter twitter = (Twitter) request.getSession().getAttribute("twitter");
RequestToken requestToken = (RequestToken) request.getSession().getAttribute("requestToken");
String verifier = request.getParameter("oauth_verifier");
try {
twitter.getOAuthAccessToken(requestToken, verifier);
request.getSession().removeAttribute("requestToken");
} catch (TwitterException e) {
throw new ServletException(e);
}
response.sendRedirect("<other_page>");
}
CallbackServlet 尝试获取保存在 LoginServlet 中的 twitter 和 requestToken(使用方法 getSession().getAttribute())。这就是问题所在:twitter 对象始终为空!
我已经完全按照代码示例中的示例进行操作,所以我期待它会起作用。
任何帮助,将不胜感激
提前致谢。